启用共享库

时间:2013-05-19 16:22:03

标签: c++ linux gcc fedora

在我的新Linux发行版(Fedora)上,如果我尝试编译我用glfw编写的东西,我会收到以下错误:

:-1: error: note: 'XF86VidModeQueryExtension' is defined in DSO /lib64/libXxf86vm.so.1 so try adding it to the linker command line

我可以通过添加-lXxf86vm解决这个问题,但我从来没有把它包含在我之前的Linux发行版中。现在我必须添加6个lib名称。

发生了什么事?似乎我的编译器拒绝.so libs?我对此进行了一些研究,似乎我必须使用--enable-shared重新编译我的gcc。

这是真的吗?

这是我从gcc的日志:

    20:32:44: Running steps for project sgl...
20:32:44: Configuration unchanged, skipping qmake step.
20:32:44: Starting: "/usr/bin/make" 
g++ -c -m64 -pipe -std=c++11 -g -Wall -W -fPIE -DQT_QML_DEBUG -DQT_DECLARATIVE_DEBUG -I../../Qt5.0.2/5.0.2/gcc_64/mkspecs/linux-g++-64 -I../kantaki-sgl -Ishaders -I. -o camera.o ../kantaki-sgl/camera.cpp
../kantaki-sgl/camera.cpp:3:6: warning: unused parameter 'pos' [-Wunused-parameter]
../kantaki-sgl/camera.cpp:7:6: warning: unused parameter 'ori' [-Wunused-parameter]
../kantaki-sgl/camera.cpp:14:6: warning: unused parameter 'window' [-Wunused-parameter]
../kantaki-sgl/camera.cpp:14:6: warning: unused parameter 'action' [-Wunused-parameter]
g++ -m64 -Wl,-rpath,/home/maik/Qt5.0.2/5.0.2/gcc_64 -o sgl main.o filereader.o shader.o camera.o   -lGL -lglfw3 -lglimgD -lglloadD 
/usr/bin/ld: /usr/local/lib/libglfw3.a(x11_clipboard.c.o): undefined reference to symbol 'XConvertSelection'
/usr/bin/ld: note: 'XConvertSelection' is defined in DSO /lib64/libX11.so.6 so try adding it to the linker command line
/lib64/libX11.so.6: could not read symbols: Invalid operation
collect2: error: ld returned 1 exit status
make: *** [sgl] Error 1
20:32:45: The process "/usr/bin/make" exited with code 2.
Error while building/deploying project sgl (kit: Desktop)
When executing step 'Make'

编辑我也用clang编译了它 - >同样的结果。

1 个答案:

答案 0 :(得分:3)

这是Fedora的DSO链接策略的变化,请看official documentation