链接.so文件通过g ++编译.cpp文件

我想获得一个图书馆工作在我的c + +项目,并没有明确的指示,如何做到这一点的人不习惯c + +

以下的链接是最接近我来了

它指出以下内容

-L/path/to/my/library/folder -ldllname 

下面的线程也声明如下

 gcc yourfile.cpp -lblah 

现在从我能看到的命令是-l + filename ,例如我的文件名是directory/libtest.so它将是-ldirectory/libtest.so ,这是正确的,有人可以澄清

我目前使用下面的命令来编译我的maincpp.cpp文件,但是想包含一个.so文件,例如./directory/libtest.so

 g++ -fPIC -o libgetmacip.so -shared -I $JAVA_HOME/include -I $JAVA_HOME/include/linux maincpp.cpp cpptoinclude.cpp 

现在从我可以看到的命令是-l + filename ,例如我的文件名是directory/libtest.so它将是-ldirectory/libtest.so

不,这是不正确的。 它应该是-Ldirectory -ltest即你使用-L来添加一个目录到链接器将要查找库的搜索路径,并且你说哪个库链接到-l ,但是链接到libtest.so或者libtest.a你说-ltest没有lib前缀或文件扩展名。

可以通过显式命名文件进行链接,而不需要-L-l选项,即只是directory/libtest.so ,但是对于动态库来说,几乎总是做错的事情,因为它将确切的路径嵌入到可执行文件中,所以程序运行时,同一个库必须在同一个地方。 您通常希望通过名称(而不是路径)链接到它,以便可以在运行时从任何位置使用具有该名称的库。