Support #2713
openProbably a linking error
0%
Description
Ive been playing around a bit with Wt now, but ever so often I encounter this silly little problem, and Im not certain where the error stems from:
Undefined symbols for architecture x86_64:
"Wt::WLink::WLink(Wt::WLink::Type, std::string const&)", referenced from:
ControlExample::page1() in ControlSkeleton.o
"Wt::WObject::setObjectName(std::string const&)", referenced from:
vtable for ControlExample in ControlSkeleton.o
"Wt::WString::WString(std::string const&, Wt::CharEncoding)", referenced from:
ControlExample::ControlExample(Wt::WEnvironment const&) in ControlSkeleton.o
ControlExample::header() in ControlSkeleton.o
"Wt::WApplication::makeAbsoluteUrl(std::string const&) const", referenced from:
vtable for ControlExample in ControlSkeleton.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: * [ControlSkeleton] Error 1
Both my Boost and my Wt install are done to custom folders, so I had to run: export DYLD_LIBRARY_PATH=/custom/directory/lib:$DYLD_LIBRARY_PATH for Boost. I did not do this for Wt, but I have added DYLD_LIBRARY_PATH to my Run environment in Qt Creator. And Ive added the LIBS -lwt -lwthttp -lboost_signals (including their paths) to my *.pro file. I wonder if I lack some libraries in my LIBS settings, and Ive searched for what libraries the functions are dependent on, but I would not be surprised if someone provide me a link to a site I most definitively should have looked at. Im running this on my MacBook. Earlier today I ran the same program on my Raspberry Pi, no problems at all.... its so strange. Im trying to find somewhere I can see what DYLD_LIBRARY_PATH's are set on this MacBook, so if anyone knows..
Updated by Koen Deforche almost 10 years ago
- Status changed from New to Feedback
- Assignee set to Koen Deforche
Hey,
I can pinpoint it like that. It will help to see the actual link command:
VERBOSE=1 make
A mac usually has an empty DYLD_LIBRARY_PATH by default, in my experience. You can check with
echo $DYLD_LIBRARY_PATH
But it's important to understand that this path is not involved in the linking problem. Linking ignores the DYLD_LIBRARY_PATH; only running an application may consult this path.
Regards,
koen
Updated by Tor Arne Fallingen almost 10 years ago
Hey koen.
Im not sure I follow, but I think you want to see more of the make commands? Well, I copied the whole thing from the compile output. It was not like a million miles long. Im using Qt Creator.
22:08:19: Starting: "/usr/bin/make"
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -headerpad_max_install_names -Wl,-syslibroot,/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk -mmacosx-version-min=10.6 -o ControlSkeleton main.o -F/Users/taf/Qt5.2.1/5.2.1/clang_64/lib -L/Users/taf/Wt/lib -lwt -lwthttp -L/Users/taf/Boost/lib -lboost_signals -lboost_system -lboost_thread -lboost_filesystem -lboost_regex -framework QtCore
Undefined symbols for architecture x86_64:
"Wt::WLink::WLink(Wt::WLink::Type, std::string const&)", referenced from:
ControlSkeleton::page1() in main.o
"Wt::WObject::setObjectName(std::string const&)", referenced from:
vtable for ControlSkeleton in main.o
"Wt::WString::WString(std::string const&, Wt::CharEncoding)", referenced from:
ControlSkeleton::ControlSkeleton(Wt::WEnvironment const&) in main.o
ControlSkeleton::header() in main.o
"Wt::WApplication::makeAbsoluteUrl(std::string const&) const", referenced from:
vtable for ControlSkeleton in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: * [ControlSkeleton] Error 1
22:08:20: The process "/usr/bin/make" exited with code 2.
Error while building/deploying project ControlSkeleton (kit: Desktop Qt 5.2.1 clang 64bit)
When executing step 'Make'
22:08:20: Elapsed time: 00:01.
Then if I understand you correctly, $DYLD_LIBRARY_PATH is one single entry (one path) and its temporary? Because yes I tried the "echo $DYLD_LIBRARY_PATH", and that gives me nada. And since I installed both Boost and Wt in custom locations, I need to link both the lib and the include directories manually when I use something dependent on them. Is there a way to do this more permanent? Like entering a path in a system file to include in the systems default directories to look for libraries and such? I feel green when I ask these things, but Im learning, and setting up RPi 50-100 times surely helps in starting to understand a little more how things are working.
Updated by Koen Deforche over 9 years ago
Hey,
The reason may be that you haven't built Wt the library with the same toolchain as your application:
- gcc versus clang
- libc versus stdlibc
- C+11 versus C+98
On MacOSX, the toolchains are a bit in a state of flux (moving away from gcc, towards CLang) but that requires some attention when trying to build applications and libraries.
Regards,
koen