"Undefined symbols" linking to external library [Mac]
-
Hi all,
I've added a library to my .pro@macx: LIBS += $$PWD/fbx/lib/libfbxsdk-2013.1-staticd.a@
which is respected, as the log from the build shows:
@14:56:41: Starting: "/usr/bin/make" -w
make: Entering directory `/Users/mlaff/Projects/MicaC++-build-desktop-Desktop_Qt_4_8_0_for_GCC__Qt_SDK__Debug'
g++ -headerpad_max_install_names -arch x86_64 -Xarch_x86_64 -mmacosx-version-min=10.5 -o MicaC++.app/Contents/MacOS/MicaC++ MicaApp.o MainWidget.o FbxContext.o PreviewWidget.o PlayerControlWidget.o QtGlContext.o FbxSceneRenderer.o moc_MicaApp.o moc_MainWidget.o moc_PreviewWidget.o moc_PlayerControlWidget.o -F/Users/mlaff/QtSDK/Desktop/Qt/4.8.0/gcc/lib -L/Users/mlaff/QtSDK/Desktop/Qt/4.8.0/gcc/lib /Users/mlaff/Projects/MicaQt/fbx/lib/libfbxsdk-2013.1-staticd.a -framework QtOpenGL -framework QtGui -framework QtCore -framework OpenGL -framework AGL @but I get "Undefined symbols:"
@Undefined symbols:
"fbxsdk_2012_2::KFbxIOSettings::Create(fbxsdk_2012_2::KFbxSdkManager*, char const*)", referenced from:
InitializeSdkObjects(fbxsdk_2012_2::KFbxSdkManager*&, fbxsdk_2012_2::KFbxScene*&)in FbxContext.o
"fbxsdk_2012_2::KFbxIOSettings::SetBoolProp(char const*, bool)", referenced from:
LoadScene(fbxsdk_2012_2::KFbxSdkManager*, fbxsdk_2012_2::KFbxDocument*, char const*)in FbxContext.o...@If I look at the ".a" file for this library, I see what looks like the correct entry point defined:
@{mlaff@YP-0013-mlaff:503} nm /Users/mlaff/Projects/MicaQt/fbx/lib/libfbxsdk-2013.1-staticd.a | grep SetBoolProp
nm: no name list
00000000000048b4 T __ZN13fbxsdk_2013_113FbxIOSettings11SetBoolPropEPKcb
00000000000477f8 S __ZN13fbxsdk_2013_113FbxIOSettings11SetBoolPropEPKcb.eh
00000000000456a7 s ZZN13fbxsdk_2013_113FbxIOSettings11SetBoolPropEPKcbE12__FUNCTION
U __ZN13fbxsdk_2013_113FbxIOSettings11SetBoolPropEPKcb
U __ZN13fbxsdk_2013_113FbxIOSettings11SetBoolPropEPKcb
U __ZN13fbxsdk_2013_113FbxIOSettings11SetBoolPropEPKcb
U __ZN13fbxsdk_2013_113FbxIOSettings11SetBoolPropEPKcb
U __ZN13fbxsdk_2013_113FbxIOSettings11SetBoolPropEPKcb
U __ZN13fbxsdk_2013_113FbxIOSettings11SetBoolPropEPKcb
@This is on Mac OS X with Qt Creator 2.4.1.
I'm new to Qt, and I tried to search out prior answers to no avail, but apologies in advance if this is a common question.
Thanks,
Mark
-
Does the static lib contain the correct architecture? It must at least have all the version that your application is compiled against.
-
Here is the description for the library I'm using (the Autodesk FBX SDK)
bq. <yourFBXSDKpath>\lib\gcc4\ub\fbxsdk-2013-staticd.a gcc 4.0 compiler, static library, debug, Intel 32-bit (i386) and Intel 64-bit (x86_64)
and I believe the following indicates that both architectures are included:
bq. {mlaff@YP-0013-mlaff:508} file libfbxsdk-2013.1-staticd.a
libfbxsdk-2013.1-staticd.a: Mach-O universal binary with 2 architectures
libfbxsdk-2013.1-staticd.a (for architecture i386): current ar archive random library
libfbxsdk-2013.1-staticd.a (for architecture x86_64): current ar archive random library -
Would you try prefixing -l to the LIBS variable like below?
@
macx: LIBS += -l$$PWD/fbx/lib/libfbxsdk-2013.1-staticd.a
@ -
I think I've made the change you suggested, but now the compile can't find the library at all.
Updated .pro:
@macx: LIBS += -l$$PWD/fbx/lib/libfbxsdk-2013.1-staticd.a@
but it looks like it is looking at a path with the "-l" at the head, not treating it as an option.
@01:03:49: Running build steps for project MicaC++...
01:03:49: Configuration unchanged, skipping qmake step.
01:03:49: Starting: "/usr/bin/make" -w
make: Entering directory/Users/mlaff/Projects/MicaC++-build-desktop-Desktop_Qt_4_8_0_for_GCC__Qt_SDK__Debug' /Users/mlaff/QtSDK/Desktop/Qt/4.8.0/gcc/bin/qmake -spec ../../QtSDK/Desktop/Qt/4.8.0/gcc/mkspecs/macx-g++ CONFIG+=declarative_debug -o Makefile ../MicaQt/MicaC++.pro make: Leaving directory
/Users/mlaff/Projects/MicaC++-build-desktop-Desktop_Qt_4_8_0_for_GCC__Qt_SDK__Debug'
make: Entering directory/Users/mlaff/Projects/MicaC++-build-desktop-Desktop_Qt_4_8_0_for_GCC__Qt_SDK__Debug' g++ -headerpad_max_install_names -arch x86_64 -Xarch_x86_64 -mmacosx-version-min=10.5 -o MicaC++.app/Contents/MacOS/MicaC++ MicaApp.o MainWidget.o FbxContext.o PreviewWidget.o PlayerControlWidget.o QtGlContext.o FbxSceneRenderer.o moc_MicaApp.o moc_MainWidget.o moc_PreviewWidget.o moc_PlayerControlWidget.o -F/Users/mlaff/QtSDK/Desktop/Qt/4.8.0/gcc/lib -L/Users/mlaff/QtSDK/Desktop/Qt/4.8.0/gcc/lib -l/Users/mlaff/Projects/MicaQt/fbx/lib/libfbxsdk-2013.1-staticd.a -framework QtOpenGL -framework QtGui -framework QtCore -framework OpenGL -framework AGL ld: library not found for -l/Users/mlaff/Projects/MicaQt/fbx/lib/libfbxsdk-2013.1-staticd.a collect2: ld returned 1 exit status make: *** [MicaC++.app/Contents/MacOS/MicaC++] Error 1 make: Leaving directory
/Users/mlaff/Projects/MicaC++-build-desktop-Desktop_Qt_4_8_0_for_GCC__Qt_SDK__Debug'
01:03:51: The process "/usr/bin/make" exited with code 2.
Error while building project MicaC++ (target: Desktop)
When executing build step 'Make'@ -
Pardon me, I think what you done previously is correct, since this is a static library.
@macx: LIBS += $$PWD/fbx/lib/libfbxsdk-2013.1-staticd.a@unfortunately I am not sure why this is giving un-resolved symbols, since you mentioned that this is having correct architecture as well.
-
For checking the library try using otool (eg. otool -hv) and see if it reveals anything extra.