0

私は非常に厄介な問題を抱えています。

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 から生成されます。

4

2 に答える 2

0

@Jonathan のコメントのおかげで、この順序は完璧に機能します。

-lQtGui -lQtCore -lQtOpenGL -lQtXml -lXmu -lXt -lXi -lXext -lX11 \
-lGL -lGLU -lm -lglut

-lGLとの順序にも注意してください-lGLU(g++/GCC の新しいバージョンの場合)。

于 2014-04-10T01:47:03.817 に答える
0

通常、libA が libB に依存している場合、libA がリンクされていれば十分です。しかし、新しい DSO リンクの変更 ( http://fedoraproject.org/wiki/UnderstandingDSOLinkChange ) に従って、libA と libB を含める必要があります。これは、libA が依存関係のない新しいバージョンをリリースしたときにコンパイルが壊れないようにするためです。彼らは今それ自体を壊したいと思っています:)

于 2013-12-03T22:13:12.080 に答える