我使用Cygwin 2.9.0-2,其中包括cmake 3.6.2。我正在尝试使用cmake 2.8在CentOS上开发一个cmake文件来运行。这是一个很大的cmake文件,导入了各种库,包括编译所有单元测试以再次运行gtest。Cygwin gcc预期什么库类型?
我完全不了解cygwin gcc是否想要Windows或Linux库来链接输入,以及它产生了什么。我一直无法谷歌答案这个问题:Cygwin希望.a/.so或.lib/.dll文件在库中编译,它是否创建相同,或者它根本不在乎。毕竟,它正在编译要在Windows上运行的可执行文件,因此我预计它只能生成.lib/.dll
,并期望它们。
我有什么困惑的是,我已经克隆了gtest repo,它的内置和安装到/usr/local/lib/libgtest.a
,我链接了我的供应商的*.lib
库,但链接器找不到gtest库。我是否需要修改gtest cmake来生成.lib
而不是.a
?
有很多事情,我可以尝试完成移植此cmake文件,我不知道从哪里开始,这种缺乏理解正在杀死我。我觉得如果我理解了这一点,那么我可以做出一个更好的决定。
Cygwin gcc手册页意味着-lLibName查找要链接的文件libLibName.a。与Linux相同。大。那么为什么VendorLib.lib链接到? (所有的迹象表明,它链接,因为我有链接错误消失,一旦我得到cmake正确搜索和找到库。)
如果最好的解释是链接到正确的文档,我会接受作为答案。如果是这样,我就找不到文档。 TIA SO用户!
更新:
配置cmake的使用64位Linux库,我从C进行下面的消息输出:
-- Found Ballard library /usr/local/lib64/ballard/libbtiCard.so
-- Found Ballard library /usr/local/lib64/ballard/libbti1553.so
而且从做如下:
/usr/local/lib64/ballard/libbtiCard.so: error adding symbols: File in wrong format
collect2: error: ld returned 1 exit status
编译Windows .lib
静态库时,我不会收到此错误消息。重命名从.so
到.dll.a
并没有改变任何东西。
我不需要Cygwin的特殊版本,对吗?这仅仅是供应商图书馆的问题,而不是Cygwin,我需要与他们解决问题?
最后更新
我复制我的供应商的WIN64/VENDOR.LIB到/usr/local/lib64/vendor/libVendor.a。
我复制我的供应商的Linux的/ API64/*。h至/usr/local/include/vendor/*.h
我还添加以下行到我的cmake的文件,所以它会搜索lib64目录/路径:
set_property(GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS TRUE)
然后移至编译谷歌测试/从/ usr /本地/ lib中模拟库到/ usr /本地/ lib64下。还有其他与我不得不改变的这个问题无关的事情,但这些都在其他SO问题中都有涉及。多么棒的社区!
看起来像有一些有趣的东西在引擎盖下运行。我认为他们保留了.a和.so扩展名以实现makefile的兼容性。但最终它是所有x86汇编程序和Window的本机exe格式。 – yacc
那么我需要重命名Windows库,以便它们具有.a扩展名? – PfunnyGuy
我认为这只是重命名而已。 .a和.dll.a都有这个'!'序言和.dll.a看起来不像嵌入任何dll。 (例如libssp.dll.a) –
yacc