Compilation problem on Qt c++ on mac os x 10.8.5
-
Hello,
I think I have to add some others flags or libraries in ListCameras.pro but I do not which flags or librairies are missed.
@QT += core
QT -= gui
TARGET = ListCameras
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp
INCLUDEPATH+=/opt/local/include/
LIBS+=-L/opt/local/lib/
LIBS+= -lPvAPI
LIBS+= -lPvJNI
DEFINES += _x64 _OSX@The configuration file ARCH given by the company for all example is like this:
@# Global ARCHitecture settings for the Sample code
this file should be adapted to your platform
Target CPU
#CPU = x86
CPU = x64Target OS
OS = OSX
OS_DIR = OSXOS-X version
OSXV = -mmacosx-version-min=10.5
architecture flags
#ARCH = -m32
compilation flags
OPT = -O3 $(ARCH) $(OSXV)
compiler version
CVER = 4.2
compiler
#CC =g++-$(CVER)
CC=g++linker
LD = ld
AR = ar
SP = stripsome flags
DFLAGS = -D_$(CPU) -D_$(OS)
#FLAGS = -fno-strict-aliasing -fexceptions -I/usr/include $(DFLAGS)
FLAGS = -I/usr/include $(DFLAGS)TIFF library
#LTIFF = -ltiff
few locations
INC_DIR = ../../inc-pc
BIN_DIR = ../../bin-pc/$(CPU)
LIB_DIR = ../../lib-pc/$(CPU)
OBJ_DIR = ./obj/$(CPU)
EXTRA_LIB = -lpthread -lzlibrary
LJPEG = -ljpeg
libs (shared/static)
PVLIB = -L$(BIN_DIR) -lPvAPI
SOLIB = $(EXTRA_LIB) -Bdynamic -lm -lc
SALIB = -Bstatic $(LIB_DIR)/$(CVER)/libPvAPI.a -framework CoreFoundation
IMLIB = -Bstatic $(LIB_DIR)/$(CVER)/libImagelib.a -Bdynamic $(LTIFF)final compilation flags
CFLAGS = $(OPT) $(FLAGS) -Wall -I$(INC_DIR) -D_REENTRANT $(EXTRA)@
the makefile for the ListCameras example is:
@# makefile of GigE SDK Sample codeinclude ../ARCH
Executable
EXE = ListCameras
$(OBJ_DIR)/%.o : %.cpp
$(CC) $(CFLAGS) $(VERSION) -c $< -o $clean:
rm $(EXE)sample : $(EXE).cpp
$(CC) $(RPATH) $(TARGET) $(CFLAGS) $(EXE).cpp -o $(EXE) $(SOLIB) $(PVLIB)sample-static : $(EXE).cpp
$(CC) $(RPATH) $(TARGET) $(CFLAGS) $(EXE).cpp $(SALIB) -o $(EXE) $(SOLIB)install:
cp -f $(EXE) $(BIN_DIR)@ -
Hi and welcome to devnet,
Did you do a clean rebuild after adding the defines ?
-
Hello,
each time, i do clean all then rebuild!
-
Did you add a custom process step ?
-
Hello,
I have not used c++ for 7 or 8 years. So i do not understand what is custom process step.
-
Nothing c++ specific,
There's this line in your output@When executing step 'Custom Process Step'@
So did you modify the build steps in the Projects panel ?
-
Thanks,
Ok , to avoid all modification. I create an other project on Qt and I just copied the main.cpp code. I got a good news and bad news.
good news: the Custum Process error is disappeared.
bad news: when i execute i get a problem like @dyld: Library not loaded: libPvAPI.dylib @ -
Go the run panel in the Projects panel.
If it's not there, add a DYLD_LIBRARY_PATH environment variable in the "Run environment" part and as value put the path to the folder containing libPvAPI.dylib (if it already exists, add the path to the current list)
-
thanks a lot,
It is progressing. I got a new errors. I learned a lots today. I cleaned and rebuild my project but I got this error.
@dyld: Symbol not found: __cg_jpeg_resync_to_restart
Referenced from: /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
Expected in: /opt/local/lib//libJPEG.dylib
in /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO@ -
Hello,
I did some research on google, developers suggests that we have to avoid use DYLD_LIBRARY_PATH because there is dynamic-linking-conflict between different libjpeg dynamic libraries on OSX . ("Conflict between dynamic linking priority in OSX?":http://stackoverflow.com/questions/17643509/conflict-between-dynamic-linking-priority-in-osx)
-
Indeed, that's why I generally ensure that common dependencies I might have between libraries comes from a common place
-
Hello,
I resolved the problem by put the library given in the SDK on the project folder. But, really I can not why when I configure it like:
@DYLD_LIBRARY_PATH=/opt/local/bin@ it did not work and I get an error like @dyld: Symbol not found: __cg_jpeg_resync_to_restart
Referenced from: /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
Expected in: /opt/local/lib//libJPEG.dylib
in /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO@
but when I copied the library form /opt/local/bin to the project folder, it work fine ??!! Any explication please ? -
@DYLD_LIBRARY_PATH=/opt/local/bin@
you are pointing to the bin folder, the dylibs are in
@DYLD_LIBRARY_PATH=/opt/local/lib@
-
Hello,
Sorry, I made a mistake in my last post.
In fact, I put@ DYLD_LIBRARY_PATH=/opt/local/lib@ but it does not work but when I copied the library form /opt/local/lib to the project folder, it work fine ??!! Any explication please ?
-
Have a look at your application with otool -L you'll see what is linked.
Then you also have the search order which is important
-
Hello,
I run this command@otool -L main .o@
but I did not get any output ? -
Not on main.o on the executable generated
-
Hello,
I run @otool -L ListAllPrsilicaCameras@
I get these output:
@ListAllPrsilicaCameras:
libPvAPI.dylib (compatibility version 0.0.0, current version 0.0.0)
libPvJNI.dylib (compatibility version 0.0.0, current version 0.0.0)
/opt/local/lib/libjpeg.9.dylib (compatibility version 11.0.0, current version 11.0.0)
/Users/kifaraaouig/Qt/5.2.0/clang_64/lib/QtCore.framework/Versions/5/QtCore (compatibility version 5.2.0, current version 5.2.0)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 60.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)@
I remark that the problem is in
@libPvAPI.dylib@When i put @DYLD_LIBRARY_PATH=/opt/local/lib@
I get the error mentioned earlier but when I changed it like:
@DYLD_LIBRARY_PATH=the project folder@
What is the problem ?
-
Hi, welcome to Mac's version of DLL hell :-)
I think it's because your app's otool -L references /opt/local/lib/libjpeg.9.dylib and otool -L on Apple's ImageIO.Framework (the one that gave the error message on Page 1) references /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJPEG.dylib.
When you use the copied DLLs in your project's folder, I think the ImageIO.Framework loads Apple's libpjpeg.dylib and all is ok, but maybe in /opt/local/lib there's a symbolic link called libpjpeg.dylib, so in that case ImageIO.Framework thinks /opt/local/lib's libpjpeg.dylib is kosher to use (and hence the error, because it's not).
Make sense? Anyway I think you need a more complete understanding exactly what dlls/dylibs are loaded. You can try with the lsof utility like this (first start your app and then open Terminal and type lsof -c and the first few letters of your app):
lsof -c ListAOr lsof -c ListA | sort
(in this case it's useful with a big Terminal window :-)