当前位置: 首页 > 面试题库 >

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

潘银龙
2023-03-14
问题内容

我正在尝试让一个库在我的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.solibtest.a-ltest没有lib前缀或文件扩展名。

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



 类似资料:
  • 问题内容: 我在使g ++链接curl lib文件时遇到一些问题。我正在将Visual Studio 2017与linux dev插件和Ubuntu Server 17.04一起使用。 给出了输出,我尝试将其添加到中的链接器选项。我还将输出添加到了编译选项。这没有解决问题。 然后,我尝试从网站上获取源代码,并使用了make和make install。给了我不同的输出。我更改了链接器中的选项,但仍然

  • 我希望使用SetupTools将一个包部署到PyPi。但是,包的核心部分实际上是用Fortran编写的,我正在使用f2py用Python包装。基本上,项目的结构如下所示: null myfunc.py模块导入hello.so(),然后myfunc.py中的函数可以使用该模块。这在我的机器上很好用。 然后我在我的Ubuntu上尝试了标准的setuptools安装:,结果安装得很好。但不幸的是,在导入

  • 问题内容: 我在运行64位Ubuntu 12.04的桌面上下载并构建了gcc 4.8.1。我像文档建议一样使用命令从源代码中构建它 它似乎通过了所有测试,我将所有内容都安装到了带有后缀-4.8的主目录中,以区别于版本4.6.3的系统gcc。 不幸的是,当我使用g -4.8编译c 程序时,它链接到系统libc和libstdc ,而不是从gcc-4.8.1编译的较新的程序。我下载并构建了gcc 4.8

  • 问题内容: 如何将JavaScript文件正确链接到HTML文档? 其次,如何在JavaScript文件中使用jQuery? 问题答案: 首先,您需要从http://jquery.com/下载JQuery库,然后以以下方式在html head标记中加载jquery库 那么您可以通过在jquery加载脚本之后编码您的jquery代码来测试jquery是否正常工作 如果要单独使用jquery脚本文件,

  • 如何正确地将JavaScript文件链接到HTML文档? 其次,如何在JavaScript文件中使用jQuery?

  • 问题内容: 在x86_64 linux上使用gcc和ld我需要链接到库的新版本(glibc 2.14),但是可执行文件需要在具有旧版本(2.5)的系统上运行。由于唯一不兼容的符号是memcpy(需要memcpy@GLIBC_2.2.5,但提供memcpy@GLIBC_2.14的库),我想告诉链接器,它应该使用我指定的旧版本,而不是使用memcpy的默认版本。 。 我发现这样做很尴尬:只需在链接器命