Dan Lincan
Dan Lincan

Reputation: 1065

qmake .pro file not parsed correctly to generate LD_LIBRARY_PATH

I have been trying in the last days to understand how qmake works buy I'm stuck. I want a project with the following structure:

root

All i wanted was to test the json library. I have created a new empty project in Qt Creator 2.3.0, and set up all the settings so the executable will run. Tested what I wanted and closed the application.

Later, when I opened Qt Creator again, I loaded the .pro file and surprise, when I try to run the project I get this message: "No executable specified." :| In this case I went to the project tab, and selected the executable manually but, as expected, when I tried to run it, I got this message "error while loading shared libraries: libjson.so: cannot open shared object file: No such file or directory". It was expected since the LD_LIBRARY_PATH is not set(it's like i'd run it from cli).

It looks like the .pro file isn't parsed properly because the 1st time, on the project tab when I was selectig Run tab, I'd see a message : "Parsing .pro file", and then the running config would get filled, and greyed out, so it means that the LD_LIBRARY_PATH was added by Qt Creator after parsing the .pro file.

Now my questing is: why was the .pro file parsed correctly 1st time?

Here's the .pro file:

!include(../../common.pri){
    error(Couldn't find the common.pri file!)
}

TEMPLATE = app

SOURCES += testjson.cpp
CONFIG += console
TARGET = testjson

CONFIG(release, debug|release) {
    DESTDIR = $$BinaryDir/Release
} else {
    DESTDIR = $$BinaryDir/Debug
}

LIBS += -L$$LibraryDir -ljson

INCLUDEPATH += $$DefaultInclude
DEPENDPATH += $$LibraryDir

PS: The solution is to manually add the LD_LIBRARY_PATH to the building environment, but I find this not the right way to do it.

Upvotes: 1

Views: 4918

Answers (2)

re-fused
re-fused

Reputation: 11

If you don't want to manually add path to LD_LIBRARY_PATH in Qt, qmake has a variable for that, it's called QMAKE_LIBDIR. In my case I couldn't link the OpenCV libraries installed in a custom path (not in /usr) but this answer unblocked me. Basically this line tells Qt/qmake to look for libraries where you want it to:
QMAKE_LIBDIR = /path_to_your_libs

Upvotes: 0

jwernerny
jwernerny

Reputation: 7048

I think you have confusion between what is controlled by the qmake (.pro) file and what is controlled by your runtime environment. The .pro file is only specifies the BUILD environment, not the runtime environment. The .pro file is only used during the build process.

When you go to run the built code, whether from a command line or from within Qt Creator, you are dealing with the RUNTIME environment. If you tried running the program from the shell, you would have to specifically specify the LD_LIBRARY_PATH. From within Qt Creator, you will have to do the same thing.

[I only have Qt Creator 2.2 installed here, but it should be very similar in 2.3]

To set the runtime environment,

  1. Select the Projects icon in the left tool bar.
  2. On the top, select "Run Settings"
  3. On the Run Settings page, go down to the "Run Environment" settings and click "Details" to show the details of the environment.
  4. Click on "Add..." and add "LD_LIBRARY_PATH" with the appropriate settings.

When you are done, the setting will be stored with your project. [The settings are actually stored in a file with a ".user" ending, not the ".pro" file.]

When you go to run your project, the environment you setup under "Run Settings" will be used, and you application should start with the correct LD_LIBRARY_PATH.

Upvotes: 3

Related Questions