从静态库动态链接?

卡盘R

我目前正在尝试在Ubuntu 14.04计算机上重建FlightGear。一切进展顺利,直到我决定构建fgrun需要Qt的版本。我决定将Qt编译为静态库,因为我不希望自建的库超过系统上的任何库。

我像这样在系统上静态构建Qt:

./configure -static -opensource -nomake tests -gtkstyle -prefix /home/user/Qt/5.4/Src/qtbuild -no-rpath -no-compile-examples -system-proxies -skip qtwebkit -skip qtwebkit-examples -nomake tools -nomake examples -skip script -release -skip multimedia -verbose -l dl -skip location -skip multimedia -skip quick1 -skip quickcontrols -skip sensors -skip serialport -skip svg -skip tools -skip translations -skip wayland -skip webchannel -skip webengine -skip xmlpatterns -skip activeqt -skip connectivity -skip declarative -skip doc -skip enginio -skip graphicaleffects -skip imageformats -skip websockets

我向FlightGear的CMake展示了在哪里可以找到库,并且一切都很好,直到最后一个链接阶段为止:

Linking CXX executable fgfs
/usr/bin/ld: /home/user/Qt/5.4/Src/qtbuild/lib/libQt5Core.a(qlibrary_unix.o): undefined reference to symbol 'dlclose@@GLIBC_2.2.5'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libdl.so: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status

现在,我以前就遇到过这个问题,这是不通过链接动态链接器库的问题-ldl但是,我已经确保Qt和FlightGear都使用该-ldl标志构建,但是仍然出现此错误。

所以现在,这使我想到了一个问题:甚至可以从静态库动态链接吗?我以为-ldl必须包含在静态库中,这是一个坏主意,这是正确的吗?

亚伦·迪古拉(Aaron Digulla)

错误消息指出您缺少dlclose@@GLIBC_2.2.5glibc(GCC使用的GNU C库)的一部分。该符号是dl.so映射到/lib/x86_64-linux-gnu/libdl.so.2我系统上的一部分。

将其添加到构建中时,请确保-ldl该命令位于末尾。链接器在处理库时将收集缺少的符号,但每个库将仅处理一次。因此,您需要确保-dl在需要它的库之后。

甚至有可能从静态库动态链接?

是的。静态库被添加到您的代码中,就好像它是您自己的源代码的一部分一样,即库只是一堆编译的对象(*.o)文件。函数名称是查找目标文件的关键。您还可以解压缩库并编写:

gcc -o exe main.o qtfoo.o -ldl

qtfoo.o来自哪里的条目libQt5Core.a

另一个解决方案是使用动态加载构建Qt并将其安装到中$HOME/local/构建安装程序应允许指定安装文件夹。

生成FlightGear时,可以$HOME/local/lib作为共享库的附加文件夹传递要启动FlightGear,您需要设置环境变量LD_LIBRARY_PATH如果在启动脚本中执行此操作,则只有FlightGear才能查看/使用您自己的Qt版本。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

链接动态库和静态库Rcpp

来自分类Dev

链接静态库与动态库的问题

来自分类Dev

链接到Xcode中的库-静态或动态

来自分类Dev

与CMake链接的C ++动态和静态库

来自分类Dev

在 LINUX 上链接静态和动态库

来自分类Dev

链接从静态库链接符号的动态库:macOS与Linux

来自分类Dev

如何创建自动链接到动态库的静态库?

来自分类Dev

如何创建自动链接到动态库的静态库?

来自分类Dev

Linux:C / C ++标准库静态与动态链接

来自分类Dev

如何从共享生成静态库(.a)以进行动态链接

来自分类Dev

说明Clang动态/静态库链接过程

来自分类Dev

共享库的静态加载是否像动态加载或静态链接那样链接?

来自分类Dev

如何使Qt和Qtcreator静态链接库而不是动态链接库?

来自分类Dev

OSX:如何静态链接库和动态链接标准库?

来自分类Dev

将动态链接库合并为一个静态链接库

来自分类Dev

级联静态库链接?

来自分类Dev

链接静态库并解析

来自分类Dev

链接静态库的问题

来自分类Dev

链接静态库

来自分类Dev

GCC链接静态库

来自分类Dev

动态链接可以正常工作时,无法使用VS2012链接到静态Boost库

来自分类Dev

动态链接其他库时如何静态链接libgomp?

来自分类Dev

无法使用VS2012链接到静态Boost库,而动态链接可以正常工作

来自分类Dev

如何静态链接一个库,该库动态链接另一个库?

来自分类Dev

为什么链接到动态库时静态库中的模板化函数会崩溃?

来自分类Dev

多个动态链接库(DLL)是否可以从静态库(LIB)共享线程本地存储

来自分类Dev

如果GCC仅找到静态库而不是动态库,它是否求助于静态链接找到的文件?

来自分类Dev

静态和动态链接的建议

来自分类Dev

使动态超链接功能静态

Related 相关文章

  1. 1

    链接动态库和静态库Rcpp

  2. 2

    链接静态库与动态库的问题

  3. 3

    链接到Xcode中的库-静态或动态

  4. 4

    与CMake链接的C ++动态和静态库

  5. 5

    在 LINUX 上链接静态和动态库

  6. 6

    链接从静态库链接符号的动态库:macOS与Linux

  7. 7

    如何创建自动链接到动态库的静态库?

  8. 8

    如何创建自动链接到动态库的静态库?

  9. 9

    Linux:C / C ++标准库静态与动态链接

  10. 10

    如何从共享生成静态库(.a)以进行动态链接

  11. 11

    说明Clang动态/静态库链接过程

  12. 12

    共享库的静态加载是否像动态加载或静态链接那样链接?

  13. 13

    如何使Qt和Qtcreator静态链接库而不是动态链接库?

  14. 14

    OSX:如何静态链接库和动态链接标准库?

  15. 15

    将动态链接库合并为一个静态链接库

  16. 16

    级联静态库链接?

  17. 17

    链接静态库并解析

  18. 18

    链接静态库的问题

  19. 19

    链接静态库

  20. 20

    GCC链接静态库

  21. 21

    动态链接可以正常工作时,无法使用VS2012链接到静态Boost库

  22. 22

    动态链接其他库时如何静态链接libgomp?

  23. 23

    无法使用VS2012链接到静态Boost库,而动态链接可以正常工作

  24. 24

    如何静态链接一个库,该库动态链接另一个库?

  25. 25

    为什么链接到动态库时静态库中的模板化函数会崩溃?

  26. 26

    多个动态链接库(DLL)是否可以从静态库(LIB)共享线程本地存储

  27. 27

    如果GCC仅找到静态库而不是动态库,它是否求助于静态链接找到的文件?

  28. 28

    静态和动态链接的建议

  29. 29

    使动态超链接功能静态

热门标签

归档