配置 我使用autotools(autoreconf -iv和./configure)来生成正确的makefile。在我的开发机器(Fedora)上,一切正常。对于make check
我使用库libcheck
和autotools
我使用Libtools
。在Fedora上,检查库是动态的:libcheck.so.0.0.0
或类似的东西。有用。如何通过autotools确定平台库是静态的还是动态的?
的问题 当我推提交给我在github上回购,做一个拉请求,其结果是在特拉维斯CI测试它使用的Ubuntu为平台。现在在Ubuntu上,libcheck是一个静态库:libcheck.a
和一个libcheck_pic.a
。
当特拉维斯做了补充检查我得到以下错误消息:
/usr/bin/ld: /usr/bin/../lib/gcc/x86_64-linux-gnu/4.9/../..
/../libcheck.a(check.o): relocation R_X86_64_32 against
.rodata.str1.1' 可
不创建共享对象时使用;与-fPIC`
/usr/bin/../lib/gcc/x86_64-linux-gnu/4.9/../../../libcheck.a: could not read
symbols: Bad value
重新编译,这意味着我必须以某种方式让配置确定我所需要的库。我怀疑我需要Ubuntu的libcheck_pic.a和Fedora的常规libcheck.so。
问题 有谁知道如何将此集成到configure.ac和使用libtool测试/ Makefile.am?我宁愿保持符合autotools生活方式。
我找不到有用的信息使用谷歌,但有很多问题在那里关于静态和动态(这不是我所需要的)之间的区别是什么。
如果有人能指出我正确的方向,或者甚至可以解决这个问题,我将不胜感激。
非常感谢您的回答。我会尝试一下方法,看看我能想出什么。如果库不可用,我特别喜欢禁用make check选项。尽管我更喜欢动态库,但我认为在之后测试_pic first和libcheck是有意义的。感谢您的解释。 +1 – guus
你的评论导致了我应该一直看到的(后见之明)解决方案。我简单地用'AC_SEARCH_LIBS([tcase_create],[check_pic check])替换AC_CHECK_LIB([check],[tcase_create])''。从我的测试程序中,我可以测试检查库的可用性:HAVE_CHECK_H。这是从头部测试中设置的。我将这个答案标记为解决方案,尽管我只应用了其中的一部分。再次感谢您的回答! – guus