我想在我的可执行文件Linux中对通向库的路径进行硬编码。在OS上,这是通过在构建库时在-o参数之后提供完整路径来实现的。例如,我在OS上构建了这样一个库:
cc foo.c --shared -o /home/sander/libfoo.so
当我构建一个名为“bar”的可执行文件,它与这个库链接,并且在可执行文件上使用otool -L时,我得到以下输出:
bar:
/home/sander/libfoo.so (compatibility version 0.0.0, current version 0.0.0)
我现在可以在任何地方运行这个可执行文件,而且它总是能够找到库。
我正
我正在Ubuntu14.04.5上构建一个动态库,这取决于一些静态库(Boost和OpenSSL)。
如果我在另一台Ubuntu机器上的项目中使用这个库,它将完美地工作。但是,如果我构建它并在一个拱形机器(Antergos)上的项目中使用它,那么在构建过程中它会这样说:
main.cpp.o: In function `init()':
main.cpp:(.text+0xf8): undefined reference to `Util::generateString[abi:cxx11](int)'
我正在用以下方法构建我的项目:
g++ -Ldeps -Ideps/inc
这是在Linux中。我有一个小工具的源代码,我要在一些新主机上安装它。我在新主机上编译代码,但它抱怨缺少一个库: ldd code.so
libpcre.so.0 => not found 新主机安装了libpcre.so.1。所以我的问题是:为什么它不针对.so.1库进行编译?为什么它专门寻找.so.0?我已经搜索了整个源代码和它includes的一些头文件,但没有对库的特定版本的引用。 下面的文档提到了“程序,当它们在内部列出它们需要的共享库时”。这似乎是在朝着正确的方向前进,但它没有详细说明程序将如何或在哪里做到这一点。
我正在尝试构建一个简单的程序来测试外部库的使用,但在将它与g++连接时遇到了困难。见命令/结果:
user@user-Nuvo-2510VTC:~/Desktop/WDT_DIO/linux/test$ g++ -o main main.o -lwdt_dio
/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib/libwdt_dio.so: undefined reference to `sem_unlink'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib/libwdt_dio.so: und
我有一个共享库,由另一个我无法控制的应用程序使用,它需要*.so对象。我的库使用了需要静态链接的sqlite3 (我绝对需要一个自包含的二进制文件)。
当我试图编译和链接我的库时:
-fpic -flto -pthread -m64
-flto -static -shared
最后会出现以下错误:
/usr/bin/ld: /usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.6.1/crtbeginT.o: relocation R_X86_64_32 against `__DTOR_END__' can not be used when mak