我有一个非常讨厌的问题。
Linking CXX executable ../../bin/TheBdfhjkGame
cd /home/user/projekt/thebdfhjkgame-ipp/build/src && /usr/bin/cmake -E cmake_link_script CMakeFiles/TheBdfhjkGame.dir/link.txt --verbose=1
/usr/bin/c++ CMakeFiles/TheBdfhjkGame.dir/eventReceiver.cpp.o \
CMakeFiles/TheBdfhjkGame.dir/main.cpp.o CMakeFiles/TheBdfhjkGame.dir/game.cpp.o \
CMakeFiles/TheBdfhjkGame.dir/window.cpp.o CMakeFiles/TheBdfhjkGame.dir/player.cpp.o \
CMakeFiles/TheBdfhjkGame.dir/object.cpp.o CMakeFiles/TheBdfhjkGame.dir/benny.cpp.o \
CMakeFiles/TheBdfhjkGame.dir/bullet.cpp.o CMakeFiles/TheBdfhjkGame.dir/base.cpp.o \
CMakeFiles/TheBdfhjkGame.dir/powerRelay.cpp.o CMakeFiles/TheBdfhjkGame.dir/ai.cpp.o \
CMakeFiles/TheBdfhjkGame.dir/qrc_systray.cxx.o \
CMakeFiles/TheBdfhjkGame.dir/__/include/moc_window.cxx.o -o ../../bin/TheBdfhjkGame \
-L/home/user/projekt/thebdfhjkgame-ipp/build/../lib -rdynamic \
/usr/lib/i386-linux-gnu/libXext.so.6 -Wl,-Bstatic -lSM -lICE -lX11 -lXext -lXxf86vm \
-lGLU -Wl,-Bdynamic -lGL -Wl,-Bstatic -lSM -lICE -lX11 -lXext -lz -lglut -lXmu -lXi \
-Wl,-Bdynamic -lQtGui -lQtCore -lBulletDynamics -lBulletCollision -lLinearMath \
-lIrrlicht -Wl,-Bstatic -lXxf86vm -lGLU -Wl,-Bdynamic -lGL -Wl,-Bstatic -lz -lglut \
-lXmu -lXi -Wl,-Bdynamic -lQtGui -lQtCore -lBulletDynamics -lBulletCollision \
-lLinearMath -lIrrlicht -Wl,-rpath,/home/user/projekt/thebdfhjkgame-ipp/build/../lib
/usr/bin/ld: /usr/lib/gcc/i686-linux-gnu/4.7/../../../i386-linux-gnu/libGL.so: undefined reference to symbol 'XextAddDisplay'
/usr/bin/ld: note: 'XextAddDisplay' is defined in DSO /usr/lib/i386-linux-gnu/libXext.so.6 so try adding it to the linker command line
/usr/lib/i386-linux-gnu/libXext.so.6: could not read symbols: Incorrect operation
collect2: error: ld returned 1 exit status
值得注意的是我已经使用了
-rdynamic /usr/lib/i386-linux-gnu/libXext.so.6
标记,但链接器要求我
'XextAddDisplay'在DSO中定义 /usr/lib/i386-linux-gnu/libXext.so.6所以尝试将它添加到链接器 命令行
我怎么解决? makefile是从cmake生成的。
答案 0 :(得分:0)
通常,如果libA依赖于libB,那么如果链接了libA就足够了。但是根据新的DSO链接更改(http://fedoraproject.org/wiki/UnderstandingDSOLinkChange),现在需要包含libA和libB。他们这样做是为了当libA发布没有依赖的新版本时,编译不会破坏。他们现在想要打破它:)
答案 1 :(得分:0)
感谢@ Jonathan的评论,这个订单很有效:
-lQtGui -lQtCore -lQtOpenGL -lQtXml -lXmu -lXt -lXi -lXext -lX11 \
-lGL -lGLU -lm -lglut
还要注意-lGL
和-lGLU
的顺序(在较新版本的g ++ / GCC中)