首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用-Ofast保持gcc 7和gcc 9之间的兼容性

如何使用-Ofast保持gcc 7和gcc 9之间的兼容性
EN

Stack Overflow用户
提问于 2021-04-07 05:57:15
回答 1查看 241关注 0票数 0

我有一个库,它是我在Ubuntu18.04上编译的,使用的是build-essential包中捆绑的gcc版本,即gcc 7.5.0。

如果我试图在Ubuntu20.04上编译一个应用程序,并链接到我之前使用默认的gcc版本,即gcc 9.3.0构建的库,那么我会得到一堆错误,比如对__expf_finite的引用未定义。注意,我确实用-Ofast编译了我的原始库,因为我需要利用所有的优化。根据libc SO this的问题,它表明libc更新不再支持math-finite.h

因此,作为一种可能的解决方案,我尝试了在Ubuntu 20.04上使用gcc 9.3.0编译我的库,然后看看是否可以使用Ubuntu 18.04上的gcc 7.5.0编译的应用程序来链接到该库(基本上与第一种情况相反)。然而,当我这样做时,我得到了std::string的ABI compat错误

代码语言:javascript
运行
复制
./trueface_sdk/libtf.a(ocl.cpp.o): In function `cv::ocl::Kernel::set(int, cv::ocl::KernelArg const&)':
ocl.cpp:(.text._ZN2cv3ocl6Kernel3setEiRKNS0_9KernelArgE+0x375): undefined reference to `std::__cxx11::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >::basic_stringstream()'
ocl.cpp:(.text._ZN2cv3ocl6Kernel3setEiRKNS0_9KernelArgE+0x49d): undefined reference to `std::__cxx11::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >::basic_stringstream()'
../trueface_sdk/libtf.a(ocl.cpp.o): In function `oclCleanupCallback.cold':
ocl.cpp:(.text.unlikely.oclCleanupCallback+0x36): undefined reference to `std::__cxx11::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >::basic_stringstream()'
ocl.cpp:(.text.unlikely.oclCleanupCallback+0xcf): undefined reference to `std::__cxx11::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >::basic_stringstream()'
ocl.cpp:(.text.unlikely.oclCleanupCallback+0x184): undefined reference to `std::__cxx11::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >::basic_stringstream()'
../trueface_sdk/libtf.a(ocl.cpp.o):ocl.cpp:(.text._ZN2cv3ocl6Device4ImplC2EPv[_ZN2cv3ocl6Device4ImplC5EPv]+0xb7b): more undefined references to `std::__cxx11::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >::basic_stringstream()' follow
../trueface_sdk/libtf.a(sqlite3.c.o):(.data.rel+0xb0): undefined reference to `fcntl64'

我还得到了对fcntl64的未定义引用。

那么解决方案是什么呢?如何编译一个兼容多个版本的gcc的库?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-12 00:32:28

根据注释,它看起来不兼容,因为使用了-Ofast编译器优化标志。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66976993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档