Linux C++ linker /usr/bin/ld
Linux C++ linker /usr/bin/ld
我使用g++4.4.6在Redhat Linux 6上编写了一个小型应用程序。编译后,我收到一个错误
/usr/bin/ld: cannot find -lcrypto
我搜索了加密库,在这里找到了它们,
[root@STL-DUNKEL01 bin]# find / -name libcrypto*
/usr/lib64/libcrypto.so.0.9.8e
/usr/lib64/libcrypto.so.10
/usr/lib64/libcrypto.so.6
/usr/lib64/libcrypto.so.1.0.0
我的问题是,编译错误是否是由/usr/bin/ld在搜索路径中没有usr/lib64/引起的?如果是,我该如何添加?
谢谢。
不,您可能错误地诊断了原因。
您需要一个libcrypto.so
进行链接。这通常是到一个实际库的符号链接,其soname(libcrypto.so.??
)将嵌入二进制文件中。运行时只需要该库,但编译时需要符号链接。
请参阅Diego E.Pettenå:链接器和名称以了解更多详细信息。
调用gcc或ld时必须添加-L/usr/lib64
。
注意,您也可以指定LD_LIBRARY_PATH/,但这样做被认为是有害的。(链接特别提到Solaris,但这些问题也适用于其他操作系统。)
报价:
- LD_LIBRARY_PATH优先于任何运行时或默认系统链接器路径。如果(上帝保佑)你把它设置为/dcs/spod/baduser/lib,如果该目录中有一个被黑客入侵的libc版本(例如),你的帐户可能会被泄露。正是由于这个原因,设置uid程序完全忽略LD_LIBRARY_PATH
- 当代码被编译并依赖于它来工作时,当不同版本的库安装在不同的目录中时,可能会引起混乱,例如/usr/openwin/lib和/usr/local/lib中有一个libtiff。在这种情况下,以前的库是Solaris附带的一些程序使用的旧库
- 有时,当使用预编译的二进制文件时,它们可能是在特定位置使用第三方库构建的;理想情况下,代码应该随库一起提供并安装到某个位置,或者作为预安装步骤链接代码。Solaris7引入了$ORIGIN,它允许在运行时指定相对的库位置(请参阅SolarisLinker和LibrariesGuide)。另一种选择是在每个程序的基础上设置LD_LIBRARY_PATH,将其作为实际程序的包装程序或shell别名。但是,请注意,LD_LIBRARY_PATH可能会被封装的程序调用的程序继承
将目录添加到/etc/ld.so.conf
然后运行"sudoldconfig"使更改生效。
您可以提供在中搜索库的目录,作为gcc
的参数,就像-L<directory_to_search_in>
一样。注意,-L
可以有多个参数。此外,您是在尝试构建32位应用程序还是64位应用程序?
相关文章:
- /usr/bin/ld: cannot find -lc++
- Linux ld 如何解释 -lSomething::AnotherSomething(如 /usr/bin/ld: 找
- /usr/bin/ld: build-debug/obj/gpsitem.o: 文件无法识别: 文件被截断
- /usr/bin/ld: cannot find -lGQt
- /usr/bin/ld:找不到本地 libmpifort.so
- /usr/bin/ld: cannot find -lcaffe
- 带有定制 GLFW 二进制 /usr/bin/ld 的 Centos 7: /usr/local/lib/libglfw3.a(init.c.o):".text"部分中无法识别的重定位 (0x2a)
- /usr/bin/ld: /tmp/cc9zxSDP.o: 对符号的未定义引用
- /usr/bin/ld: crtbegin.o: 没有这样的文件: 没有这样的文件或目录
- g++ 编译错误消息:/usr/bin/ld:找不到 -LSSL
- /usr/bin/ld:在CentOS 7中找不到-lclapack
- /usr/bin/ld:在 Redhat 上找不到 /usr/lib64/libasan.so.0.0.0
- /usr/bin/ld:无法打开输出文件 bin/genericMatching:没有这样的文件或目录
- /usr/bin/ld:在运行gmock程序时无法在ubuntu上找到-lgmock
- /usr/bin/ld找不到标头:未识别的文件格式
- 如何在 C++ 中修复"/usr/bin/ld: warning: liblber-2.4.so.2, needed by //usr/lib/x86_64-linux-gnu/libcurl-gnu
- /usr/bin/ld: 在 ubuntu 16.04 中找不到 -lLLVMJIT(和 -lLLVMipa)
- NDK r16b 独立工具链错误:"/usr/bin/ld: this linker was not configured to use sysroots"
- /usr/bin/ld: cannot find -lGL (AimTux)
- Docker构建错误/usr/bin/ld:找不到-lstdc fedora29