【发布时间】:2015-05-13 14:18:34
【问题描述】:
我在 RedHat 系统上工作。
uname -m
x86_64
所有的库都是 32 位的。
/usr/bin/ld lib/libssh2.so
lib/libssh2.so could not read symbols: File in wrong format
file lib/libssh2.so
lib/libssh2.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped
编译时出现错误:
usr/bin/ld: cannot find -lssh2
collect2: ld returned 1 exit status
编译命令:
g++ src/Testcase.o src/Test.o -L../testcase/lib -L/usr/lib -L/usr/lib \
-lcrypto -lz -lpthread -lssl -lcurl -lssh2 -o ./debug/testcase
【问题讨论】:
-
你需要安装64位版本的SSH2库,或者指定64位版本的安装位置,或者将软件重建为32位代码(使用@987654325 @ 和/或
gcc -m32)。 -
我正在用 32 位代码构建 sw。 /usr/bin/ld lib/libssh2.so.1.0.1 lib/libssh2.so.1.0.1:无法读取符号:文件格式错误,文件 lib/libssh2.so.1.0.1 lib/libssh2.so。 1.0.1:ELF 32 位 LSB 共享对象,Intel 80386,版本 1 (SYSV),动态链接,剥离
-
你确定吗?
file src/Test.o和file /usr/lib/libz.so的输出是什么(对于任何通往-lz库的路径)?在许多(大多数?)x86_64 系统上,默认编译模式是 64 位。您应该指定-L ./lib来查找lib/libssh2.so(其中./是可选但显式的,并且空格也是可选的)。 -
@JonathanLeffler .. 是的,它生成 32 位库。 file
输出显示 lib 文件是 32 位的。 -
file lib/libssh2.so是否提供与其他共享库完全相同的文件类型消息?还是有区别?您是构建了lib/libssh2.so,还是从其他地方收集了副本?ldd lib/libssh2.so可以正常工作吗?您是否打算在安装软件时将libssh2.so安装到系统目录中 - 哦,现在不要担心,但是一旦您的代码成功链接,这将成为一个需要考虑的问题。跨度>