【问题标题】:Linking shared, static, and dynamic library链接共享库、静态库和动态库
【发布时间】:2013-12-04 23:34:28
【问题描述】:

我构建并安装了 spidermonkey 的源代码,我想将它的库及其包含文件夹与我的 C++ 应用程序链接起来,所以我在 linux 上编写了这个命令

 g++ -I/home/SpiderMonkey/js-1.8.5/js/src/dist/include 
 -L/home/SpiderMonkey/js1.8.5/js/src/dist/lib -lmozjs185  helloworld.cpp -o

但是它给了我未定义的引用错误,那么这个命令有什么问题: src代码的构建路径是home/SpiderMonkey/js1.8.5/src 当我安装src代码时,它的libs和include文件夹现在分别存在于usr/local/lib和usr/local/include/js中,所以我应该在命令中使用哪个路径来编译我的hellowrorld.cpp。 另外,我发现了 3 个同名但扩展名不同的库:

libname.so, libname.so.1.0, libname.so.1.0.0 and libname.a 

我应该使用哪个库,有什么区别?

【问题讨论】:

  • *.so 是动态库,*.a 是静态库
  • 那么 .so.1.0 和 .so.1.0.0 呢?我应该使用哪一个?静态的还是动态的?

标签: c++ g++ static-linking dynamic-linking spidermonkey


【解决方案1】:

将库放在你的main.cpp 上编译命令。链接器根据它已经看到的对象(从左到右)确定从这些库中提取哪些符号。

至于你的附录问题:

  • libname.a 用于静态链接。

  • libname.solibname.so.1.0libname.so.1.0.0 都是同一个文件,只是名称的版本信息粒度越来越高。

使用哪个超出了此答案的范围,但您可以找到有关网络上已经存在的大量信息。

【讨论】:

  • 它在编译过程中工作,但是当我尝试使用 ./helloworld 运行我的 helloworld.cpp 时,它给了我这个错误:加载共享库时出错:libname.so.1.0 无法打开共享对象文件,没有这样的文件或目录
  • 现在有什么问题?
  • @sara:您需要将库放在系统中的适当位置,或者如果您想暂时使用当前目录来存放库,请使用export LD_LIBRARY_PATH=.。您应该找到一些有关如何使用库的阅读材料。
  • 再次感谢您,当我使用此命令时,问题已解决,正如您所说的 export LD_LIBRARY_PATH=/usr/local/lib
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-19
相关资源
最近更新 更多