Linker 在AIX上链接Autotools项目时避免-blibpath

Linker 在AIX上链接Autotools项目时避免-blibpath,linker,aix,autotools,autoconf,powerpc,Linker,Aix,Autotools,Autoconf,Powerpc,我们在AIX上使用Autotools构建的项目中发现了一个错误。根据gdb的说法,它在启动代码中正在消亡。使用GNUmakefile构建的同一个项目很好。一个相关的问题是 Autotools添加了一些不寻常的链接器标志,我们相当确定这是问题的根本原因。自动工具生成的Makefile已联机 以及: 这些标志不是来自环境或我们的configure.ac: -bash-4.4$ echo $LDFLAGS -bash-4.4$ echo $LDLIBS $LIBS -bash-4.4$ 我们添加了A

我们在AIX上使用Autotools构建的项目中发现了一个错误。根据gdb的说法,它在启动代码中正在消亡。使用GNUmakefile构建的同一个项目很好。一个相关的问题是

Autotools添加了一些不寻常的链接器标志,我们相当确定这是问题的根本原因。自动工具生成的Makefile已联机

以及:

这些标志不是来自环境或我们的
configure.ac

-bash-4.4$ echo $LDFLAGS
-bash-4.4$ echo $LDLIBS $LIBS
-bash-4.4$
我们添加了
AM_CXXFLAGS
AM_LDFLAGS

AM_CXXFLAGS:  -pthread -fdata-sections -ffunction-sections
AM_LDFLAGS:  -pthread -Wl,--demangle
我已尝试
使LDFLAGS=“
并覆盖自动工具标志,但添加了相同的标志

我的第一个问题是,它们如何覆盖我们的
LDFLAGS
?GNU makefiles不是这样工作的。GNU始终允许用户覆盖makefile的标志

我的第二个问题是,我们如何阻止自动工具在链接阶段添加不需要的标志


这是我们的。以下是我们在运行香草
/configure
后添加的选项摘要:

Auto-configuration complete. A summary of options are below. If
something looks wrong then please modify config.h and please report
it at http://github.com/noloader/cryptopp-autotools.

   Build triplet: powerpc-ibm-aix7.2.0.0
 Compiler target: powerpc-ibm-aix7.2.0.0
Compiler version: g++ (GCC) 7.2.0

Static library: yes
Shared library: yes

CRYPTOPP_PPC_FLAG: -mcpu=power8 -maltivec
CRYPTOPP_CHAM_FLAG: -mcpu=power7 -maltivec
CRYPTOPP_CRC_FLAG: -mcpu=power8 -maltivec
CRYPTOPP_LEA_FLAG: -mcpu=power7 -maltivec
CRYPTOPP_GCM_FLAG: -mcpu=power8 -maltivec
CRYPTOPP_AES_FLAG: -mcpu=power8 -maltivec
CRYPTOPP_SHA_FLAG: -mcpu=power8 -maltivec
CRYPTOPP_SIMECK_FLAG: -mcpu=power7 -maltivec
CRYPTOPP_SIMON_FLAG: -mcpu=power7 -maltivec
CRYPTOPP_SPECK_FLAG: -mcpu=power7 -maltivec
CRYPTOPP_SM4_FLAG: -mcpu=power7 -maltivec

Automake flags (can be overridden by user flags):
AM_CXXFLAGS:  -pthread -fdata-sections -ffunction-sections
AM_LDFLAGS:  -pthread -Wl,--demangle

User flags (overrides Automake flags on conflict):
CXXFLAGS: -g -O2
LDFLAGS:
我的第一个问题是,它们是如何覆盖我们的国旗的?GNU makefile不是这样工作的。GNU始终允许用户重写 makefile的标志

自动工具不会覆盖您的
LDFLAGS
。这样做不在他们的权力范围内,而是他们不会凌驾于项目建设人的决定之上

但是,
LDFLAGS
不是链接选项的唯一来源。编译器标志也被添加了,特别是要链接的库不应该包含在
LDFLAGS
(或
AM\u LDFLAGS
mytarget\u LDFLAGS
)中,因为这些变量(后两个变量中的第一个和恰好一个)在要链接的对象列表之前展开

但除此之外,
libtool
还添加了它认为合适的标志,这就是在您的案例中,
-Wl,-blibpath
的来源

我的第二个问题是,我们如何阻止Autotools添加 链接阶段不需要的标志

恐怕不容易。最好的选择可能是修改
libtool
shell脚本的项目内副本以抑制它。这类似于Fedora的打包指南,用于抑制ELF二进制文件中
rpath
项的生成


你也可能想深入研究为什么这个选项会给你带来麻烦。它设置了一个运行时共享库搜索路径(同样类似于rpath),如果您在有和无的情况下获得不同的行为,那么这意味着在这两种情况下,不同的库将动态链接。它看起来像是
libtool
根据编译时库搜索路径选择它的路径,如果是这样,那么您应该担心您正在链接的库在运行时无法成功支持该程序。

Hi,您使用的autotool命令是什么?@Lorinczy-我用Autotools命令和我们通过
AM\u cxflags
AM\u LDFLAGS
添加的标志添加了其他信息@Lorinczy-您有什么想法吗?我很困惑这些额外的标志是从哪里来的,为什么我不能覆盖它们。你应该找出这个LDFLAGS是从哪里来的,因为它是完全错误的。整个程序是否可以从某个地方下载?@Lorinczy-是的,Autotools前端作为一个单独的项目提供。谢谢John。深入挖掘以确定问题出在哪里是不可能的。未安装符号,调试器仅在部分时间工作。事实上,我甚至不能在调试器下重新启动程序。另外,我无法修复启动代码中的错误。那是别人的密码。
Auto-configuration complete. A summary of options are below. If
something looks wrong then please modify config.h and please report
it at http://github.com/noloader/cryptopp-autotools.

   Build triplet: powerpc-ibm-aix7.2.0.0
 Compiler target: powerpc-ibm-aix7.2.0.0
Compiler version: g++ (GCC) 7.2.0

Static library: yes
Shared library: yes

CRYPTOPP_PPC_FLAG: -mcpu=power8 -maltivec
CRYPTOPP_CHAM_FLAG: -mcpu=power7 -maltivec
CRYPTOPP_CRC_FLAG: -mcpu=power8 -maltivec
CRYPTOPP_LEA_FLAG: -mcpu=power7 -maltivec
CRYPTOPP_GCM_FLAG: -mcpu=power8 -maltivec
CRYPTOPP_AES_FLAG: -mcpu=power8 -maltivec
CRYPTOPP_SHA_FLAG: -mcpu=power8 -maltivec
CRYPTOPP_SIMECK_FLAG: -mcpu=power7 -maltivec
CRYPTOPP_SIMON_FLAG: -mcpu=power7 -maltivec
CRYPTOPP_SPECK_FLAG: -mcpu=power7 -maltivec
CRYPTOPP_SM4_FLAG: -mcpu=power7 -maltivec

Automake flags (can be overridden by user flags):
AM_CXXFLAGS:  -pthread -fdata-sections -ffunction-sections
AM_LDFLAGS:  -pthread -Wl,--demangle

User flags (overrides Automake flags on conflict):
CXXFLAGS: -g -O2
LDFLAGS: