ld:致命:在 solaris 上编译 libssh2 时,重定位仍然针对可分配但不可写的部分

ld: fatal: relocations remain against allocatable but non-writable sections, when compiling libssh2 on solaris

我正在 Solaris 10 机器上编译 libssh2 版本 1.4.2。

它完成了编译的大部分工作,然后我得到了这个:

libtool: link:  gcc -shared  -fPIC -DPIC -Wl,-z -Wl,text -Wl,-M -Wl,.libs/libssh2.so.1.0.1.exp -Wl,-h -Wl,libssh2.so.1 -o .libs/libssh2.so.1.0.1  .libs/channel.o .libs/comp.o .libs/crypt.o .libs/hostkey.o .libs/kex.o .libs/mac.o .libs/misc.o .libs/packet.o .libs/publickey.o .libs/scp.o .libs/session.o .libs/sftp.o .libs/userauth.o .libs/transport.o .libs/version.o .libs/knownhost.o .libs/agent.o .libs/openssl.o .libs/libgcrypt.o .libs/pem.o .libs/keepalive.o .libs/global.o   -L/export/home/ixbuild/local//lib -lssl -lcrypto -lz -lnsl -lsocket -lc  -O2
Text relocation remains                         referenced
    against symbol                  offset      in file
<unknown>                           0x10        /export/home/ixbuild/local//lib/libcrypto.a(dsa_asn1.o)
<unknown>                           0x24        /export/home/ixbuild/local//lib/libcrypto.a(dsa_asn1.o)
CBIGNUM_it                          0x28        /export/home/ixbuild/local//lib/libcrypto.a(dsa_asn1.o)
<unknown>                           0x38        /export/home/ixbuild/local//lib/libcrypto.a(dsa_asn1.o)
CBIGNUM_it                          0x3c        /export/home/ixbuild/local//lib/libcrypto.a(dsa_asn1.o)
... many similar lines ...
ld: fatal: relocations remain against allocatable but non-writable sections

谷歌搜索我发现很多关于这个错误的参考与没有-fPIC的编译有关,但是这个标志已经被使用了。

奇怪的是,当我第一次安装这台机器时,它工作得很好。当时我用的是libssh2-1.3.0。

更新: @jww 建议这是 this answer 的副本,指出问题缺少 -fPIC 标志。正如问题中已经指出的那样,我已经检查过了并且正在使用 -fPIC 。在下面查看我的答案,了解我的实际解决方案。

至少在我的例子中,这是由于尝试使用 gcc 编译新版本的 libssh2,并且 link 针对以前使用 Solaris cc 编译的 openssl 库。

通过添加一个 CC 环境变量强制 configure 使用 Solaris cc 命令,就像这样,我可以编译它:

CC="/opt/solstudio12.2/bin/cc" ./configure --prefix=/export/home/ixbuild/local --disable-static

查看我之前执行的安装的笔记,我以前不需要这样做,所以配置脚本已经以某种方式更改为更喜欢 gcc(如果可用),或者环境已经改变(我是不完全确定 gcc 是否在我之前构建时的路径中)。