qt does not try to find a 3rd party lib even though its location is specified
-
@ohuohuo Yes. I didn't know that happened. Are you one Mac, I think in mac you have to include your framework. I will check and let you know. (don't have a Mac right now)
@asanka424 No, i'm using ubuntu12.04, 32bit
-
@asanka424 well, there's no compile error... I guess it's a runtime problem
-
Take a look at the Makefile that qmake creates. Is the missing shared lib in it? If not, then there is something wrong with your .pro file.
Also check the date modified of the Makefile in case for some reason it's not getting updated.
@KeithS Thanks. I checked out the makefile, it seems nothing wrong. Any ideas?
CC = gcc
CXX = g++
DEFINES = -DQT_WEBKIT -DQT_OPENGL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED
CFLAGS = -pipe -g -Wall -W -D_REENTRANT $(DEFINES)
CXXFLAGS = -pipe -g -Wall -W -D_REENTRANT $(DEFINES)
INCPATH = -I/usr/share/qt4/mkspecs/linux-g++ -I../RemoteClient -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtOpenGL -I/usr/include/qt4 -I../RemoteClient/include -I../RemoteClient/Configuration/Public -I../RemoteClient/lib -I../RemoteClient -I/usr/X11R6/include -I. -I. -I../RemoteClient -I.
LINK = g++
LFLAGS =
LIBS = $(SUBLIBS) -L/usr/lib/i386-linux-gnu -L/usr/X11R6/lib -L./lib/ -Wl,-rpath=./lib/,-rpath=./ -lhcnetsdk -lPlayCtrl -lMPCtrl -lQtOpenGL -lQtGui -lQtCore -lGL -lpthread
AR = ar cqs
RANLIB =
QMAKE = /usr/bin/qmake-qt4
TAR = tar -cf
COMPRESS = gzip -9f
COPY = cp -f
SED = sed
COPY_FILE = $(COPY)
COPY_DIR = $(COPY) -r
STRIP = strip
INSTALL_FILE = install -m 644 -p
INSTALL_DIR = $(COPY_DIR)
INSTALL_PROGRAM = install -m 755 -p
DEL_FILE = rm -f
SYMLINK = ln -f -s
DEL_DIR = rmdir
MOVE = mv -f
CHK_DIR_EXISTS= test -d
MKDIR = mkdir -p -
not really... on MAC OS X I generally put my -LIBS += -Lsomepath and my LIBS += -lsomelib on separate lines. That is just to make it easier to change though.
I do find that the link order is important for some libraries on UNIX boxes (like Mac OS X).
Are you using a Mac or something else?
I might be useful to see what you get in the compile output window. -
not really... on MAC OS X I generally put my -LIBS += -Lsomepath and my LIBS += -lsomelib on separate lines. That is just to make it easier to change though.
I do find that the link order is important for some libraries on UNIX boxes (like Mac OS X).
Are you using a Mac or something else?
I might be useful to see what you get in the compile output window.@kenchan no, it's on Ubuntu12.04 32bit. The compile output is:
23:39:32: Running build steps for project RemoteClient...
23:39:32: Configuration unchanged, skipping qmake step.
23:39:32: Starting: "/usr/bin/make" -w
make: Entering directory/home/.../QtWorkspace/RemoteClient-build-desktop-Qt_4_8_1_in_PATH__System__Debug' make: Nothing to be done forfirst'.
make: Leaving directory `/home/.../QtWorkspace/RemoteClient-build-desktop-Qt_4_8_1_in_PATH__System__Debug'
23:39:32: The process "/usr/bin/make" exited normally. -
hmm not very useful since you are not rebuilding...
now what does it look like when you do this...
clean
run qmake
build or rebuild just to be sure :-)@kenchan yeah, I rebuilt that , but it's large file which part you think would be most interesting?
output of just ran qmake:
00:01:05: Running build steps for project RemoteClient...
00:01:05: Starting: "/usr/bin/qmake-qt4" /home/.../QtWorkspace/RemoteClient/RemoteClient.pro -r -spec linux-g++ CONFIG+=debug CONFIG+=declarative_debug
00:01:05: The process "/usr/bin/qmake-qt4" exited normally. -
hmm not very useful since you are not rebuilding...
now what does it look like when you do this...
clean
run qmake
build or rebuild just to be sure :-)@kenchan I looked at the output of ldd, it seems that this program does not depend on libMPCtrl.so and libPlayCtrl.so files. And after I changed to unix{
LIBS += -L./lib/ -Wl,-rpath=./lib/,-rpath=./ -lhcnetsdk -lPlayCtrl -lMPCtrl
}, I can neither find libMPCtrl.so nor libPlayCtrl.so. -
@kenchan yeah, I rebuilt that , but it's large file which part you think would be most interesting?
output of just ran qmake:
00:01:05: Running build steps for project RemoteClient...
00:01:05: Starting: "/usr/bin/qmake-qt4" /home/.../QtWorkspace/RemoteClient/RemoteClient.pro -r -spec linux-g++ CONFIG+=debug CONFIG+=declarative_debug
00:01:05: The process "/usr/bin/qmake-qt4" exited normally. -
@kenchan I looked at the output of ldd, it seems that this program does not depend on libMPCtrl.so and libPlayCtrl.so files. And after I changed to unix{
LIBS += -L./lib/ -Wl,-rpath=./lib/,-rpath=./ -lhcnetsdk -lPlayCtrl -lMPCtrl
}, I can neither find libMPCtrl.so nor libPlayCtrl.so."it seems that this program does not depend on libMPCtrl.so and libPlayCtrl.so files"
So maybe I'm missing something, but from what you have said it seems your app does not depend on the shared libraries hence that's why it doesn't try and load them? What exactly is the error message you are getting when you try and run the app?
btw I think your LIBS line in the .pro file is not quite right:
unix{
LIBS += -L./lib/ -Wl,-rpath=./lib/,-rpath=./ -lhcnetsdk -lPlayCtrl -lMPCtrl
}The rpath stuff does not belong here, it should be in QMAKE_LFLAGS e.g I have:
QMAKE_LFLAGS += -rdynamic
QMAKE_LFLAGS += '-Wl,-rpath,'$$ORIGIN/../lib',-z,origin'
QMAKE_LFLAGS_RPATH=which makes the executable look in <executable_dir>../lib for the shared libs to be loaded at runtime. Then for 3rd party libs I use:
LIBS += -L<path_to_lib> -l<lib_name>
You don't need a trailing '/' after the -L path.
-
If you don't get any compile errors or runtime errors and your only concern is those .so files are not being read while your program is in run, my guess is that your program is not using those library functions at all
@asanka424 exactly, so the question is how can I load these libs, I must use functions in them
-
@asanka424 yeah, and when I call it, the SDK will show me an error "Fail to load Player SDK"
-
so when you start your executable it runs but when it reaches that particular call it will show an error? If that is the case, my guess is that your library needs some pluggins and it doesn't find those (or that) pluggin(s).
I didn't look at the library. Is it related to playing video? If so it probably relying on some codecs. (Just a guess)
-
so when you start your executable it runs but when it reaches that particular call it will show an error? If that is the case, my guess is that your library needs some pluggins and it doesn't find those (or that) pluggin(s).
I didn't look at the library. Is it related to playing video? If so it probably relying on some codecs. (Just a guess)
@asanka424 you know what, I have an example program, which provided by vender, it works fine! no any plugins, no other things, same libs. And I checked out its pro. file, they have same functionalities. while mine just doesn't work...
-
@asanka424 you know what, I have an example program, which provided by vender, it works fine! no any plugins, no other things, same libs. And I checked out its pro. file, they have same functionalities. while mine just doesn't work...