一尘不染

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

linux

我正在尝试让一个库在我的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

阅读 566

收藏
2020-06-07

共1个答案

一尘不染

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

不,那是不正确的。应该是,-Ldirectory -ltest即您-L用来将目录添加到链接器将在其中查找库的搜索路径,并说出要使用链接到的库-l,但是要链接到libtest.solibtest.a-ltest没有lib前缀或文件扩展名。

可以
通过不带-L-l选项的显式命名文件(即just)进行链接directory/libtest.so,但是对于动态库,这几乎总是错误的做法,因为它将确切的路径嵌入到可执行文件中,因此同一库必须位于同一位置程序运行时。通常,您想按名称(而不是路径)链接到它,以便可以在运行时从任何位置使用具有该名称的库。

2020-06-07