C++ 链接共享、静态和动态库

C++ 链接共享、静态和动态库,c++,g++,static-linking,dynamic-linking,spidermonkey,C++,G++,Static Linking,Dynamic Linking,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/SpiderMonk

我构建并安装了蜘蛛猴的源代码,我想把它的库及其包含的文件夹与我的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 
我应该使用哪个图书馆,有什么区别

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

关于你的补充问题:

  • libname.a
    用于静态链接

  • libname.so
    libname.so.1.0
    libname.so.1.0.0
    都是同一个文件,只是名称使版本信息粒度不断提高


使用哪一个超出了本答案的范围,但是您可以在web上找到大量关于已经存在的库的信息。

*。动态库也是如此,*.a是静态库,那么.so.1.0和.so.1.0.0呢?我应该用哪一个?静态的还是动态的?它在编译过程中起作用,但当我尝试使用./helloworld运行helloworld.cpp时,它给出了以下错误:加载共享库时出错:libname。因此.1.0无法打开共享对象文件,没有这样的文件或目录现在有什么问题?@sara:如果要临时使用当前目录作为库,您需要将库放在系统中的适当位置,或者使用
export LD\u library\u PATH=。
。您应该会找到一些关于如何使用库的阅读材料。再次感谢您当我使用这个命令时,问题已经解决了,正如您所说的export LD_LIBRARY_PATH=/usr/local/lib