链接共享,静态和动态库

时间:2013-12-04 23:34:28

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

我构建并安装了spidermonkey的源代码,我想用我的C ++应用程序链接它的库及其include文件夹,所以我在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 

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

1 个答案:

答案 0 :(得分:1)

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

关于你的附录问题:

  • libname.a用于静态链接。

  • libname.solibname.so.1.0libname.so.1.0.0都是相同的文件,只是名称可以提供更高级别的版本信息粒度。

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