草庐IT

SO_BACKLOG

全部标签

c++ - 对于不遵循 libNAME.so 命名约定的库,如何在没有 -l 或硬编码路径的情况下使用 GCC 链接?

我有一个共享库,我希望使用GCC链接可执行文件。共享库的名称不是libNAME.so形式的非标准名称,因此我不能使用通常的-l选项。(它恰好也是一个Python扩展,因此没有“lib”前缀。)我可以将库文件的路径直接传递给链接命令行,但这会导致库路径被硬编码到可执行文件中。例如:g++-obuild/bin/myappbuild/bin/_mylib.so有没有办法链接到这个库而不会导致路径被硬编码到可执行文件中? 最佳答案 有一个“:”前缀可以让你给你的库赋予不同的名字。如果你使用g++-obuild/bin/myapp-l:_m

c++ - ubuntu 12.04 中的 openCV 程序编译错误 "libopencv_core.so.2.4: cannot open shared object file: No such file or directory"

我在ubuntu12.04中编译并安装了openCV2.4.2。在/usr/local/include下我可以看到目录/usr/local/opencv和/usr/local/opencv2。这是我写的代码:#include#include#includeusingnamespacecv;usingnamespacestd;intmain(intargc,char**argv){Matimage;image=imread(argv[1],1);if(argc!=2||!image.data){cout我使用这个命令行编译它:g++DisplayImage.cpp-oDisplayIma

linux - ld-linux.so.2 和 linux-gate.so.1 是什么?

当我运行lddprogram我得到表单的输出linux-gate.so.1=>(0xb77ae000)libstdc++.so.6=>/lib/libstdc++.so.6(0xb76bc000)libm.so.6=>/lib/libm.so.6(0xb7691000)libgcc_s.so.1=>/lib/libgcc_s.so.1(0xb7674000)libc.so.6=>/lib/libc.so.6(0xb74c2000)/lib/ld-linux.so.2(0xb77af000)您能解释一下输出以及linux-gate.so.1和ld-linux.so.2显示与其他条目不同的

命令行查看内容 Shared Object Module(lib*.so)

查看共享对象模块(lib*.so)内容的命令行是什么?就像我们的使用方式:ar-tlib*.a用于文件(lib*.a),它显示库中的所有目标文件。EDIT1示例ar-tlib*.a给我一​​个展示:asset.osldep.o 最佳答案 使用nm-D--defined-onlylibname.so从动态库中获取符号名称。--defined-only开关只显示在这些文件中定义的符号,而不是对外部函数的引用。另一种方法是使用objdump,只捕获文本部分中的符号:objdump-T/usr/lib/libjpeg.so|greptext

php - wkhtmltopdf - libfontconfig.so.1 : cannot open shared object file

已结束。这个问题是off-topic.它目前不接受答案。想要改进这个问题?Updatethequestion所以它是on-topic堆栈溢出。关闭10年前。Improvethisquestion我正在尝试在我的debianlinux服务器上安装wkhtmltopdf,以便能够测试它是否从url创建了pdf。我已经下载了wkhtmltopdf-0.9.9-static-i386.tar.bz2并将其内容提取到一个目录中。当我尝试测试它是否正常工作时,我遇到了下一个错误:/usr/local/bin#wkhtmltopdfhttp://google.comgoogle.pdfwkhtmlt

linux - libaio.so.1 : cannot open shared object file

我有一个简单的测试程序,运行时我得到:./hello:errorwhileloadingsharedlibraries:libaio.so.1:cannotopensharedobjectfile:Nosuchfileordirectory我是这样链接的:$(CC)$(CCFLAGS)-ohellohello.o-L../ocilib-3.9.3/src/.libs-L../instantclient_11_2-locilib我的LD_LIBRARY_PATH包含这个:LD_LIBRARY_PATH=../ocilib-3.9.3/src/.libs:../instantclient_

c - 链接到 .so 文件中的旧符号版本

在x86_64linux上使用gcc和ld我需要链接到较新版本的库(glibc2.14),但可执行文件需要在具有较旧版本(2.5)的系统上运行。由于唯一不兼容的符号是memcpy(需要memcpy@GLIBC_2.2.5但库提供memcpy@GLIBC_2.14),我想告诉链接器,与其采用memcpy的默认版本,不如采用我指定的旧版本.我找到了一种非常笨拙的方法:只需在链接器命令行中指定旧的.so文件的副本即可。这工作得很好,但我不喜欢有多个.so文件的想法(我只能通过指定我链接到的所有旧库也有对memcpy的引用来使其工作)检查到svn并由我的构建系统需要.所以我正在寻找一种方法来告

linux - 如何在 Linux 中将 .so 文件添加到 java.library.path

我正在使用一个java应用程序,它需要在windows中的java.library.path中的.dll文件。要在Linux中运行相同的应用程序,我有相应的.so文件应该添加到linux机器中的java.library.path中,我没有找到任何简单的解决方案,所以远我确实将.so放在了已经在类路径中的文件夹中,但我的应用程序仍然提示中没有必需的.so文件java.library.path我想找:将.so添加到java.library.path的方法如何知道它是否已经添加(添加时) 最佳答案 在启动应用程序之前将包含目录添加到LD_

c++ -/usr/lib/x86_64-linux-gnu/libstdc++.so.6 : version CXXABI_1. 3.8' 未找到

事实证明,“makeinstall”-安装并暗示目标“install-target-libstdc++v3”的make目标实际上并不意味着您已准备好开始。我一直想知道我做错了什么,因为我认为这样的make目标会为我做到这一点。 最佳答案 将库的路径添加到LD_LIBRARY_PATH环境变量TL;DRGCC要求您在找不到正确版本时手动告诉它您的库的位置,这可以通过几种方式完成。一种是将其添加到LD_LIBRARY_PATH。exportLD_LIBRARY_PATH="/usr/local/lib64/:$LD_LIBRARY_PA

c++ -/usr/lib/libstdc++.so.6 : version `GLIBCXX_3.4.15' not found

如何在Ubuntu中获取GLIBCXX_3.4.15?我无法运行我正在编译的某些程序。当我这样做时:strings/usr/lib/libstdc++.so.6|grepGLIBC我明白了:GLIBCXX_3.4GLIBCXX_3.4.1GLIBCXX_3.4.2GLIBCXX_3.4.3GLIBCXX_3.4.4GLIBCXX_3.4.5GLIBCXX_3.4.6GLIBCXX_3.4.7GLIBCXX_3.4.8GLIBCXX_3.4.9GLIBCXX_3.4.10GLIBCXX_3.4.11GLIBCXX_3.4.12GLIBCXX_3.4.13GLIBCXX_3.4.14GLI