作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我使用地址清理器清理我的应用程序,该应用程序与 SOCI 链接。但是在与 Oracle 一起使用时,该提示会跟随错误消息。
./SociUT: symbol lookup error: /home/testhome/libs/libsoci_oracle.d.so.1.4.18: undefined symbol: __asan_unregister_globals
这是应用程序的构建输出
/home/rel/GCC/asan-gcc-4.9.3/bc0232/bin/g++ -std=c++11 -g3 -static-libasan -fsanitize=address -fno-omit-frame-pointer -L/home/mt_1/4/4.7.c/build/bc0397/tech/MB/link/API/63 -L/usr/lib64 -L/usr/lib64 -L/home/janaka077/mt-git/mt-database/mt_1/database_SOCI_Core/bin -L/usr/local/boost_1_59_0/stage/lib -L/usr/local/boost_1_59_0/stage/lib -L/usr/local/gtest-1.7.0/lib/.libs -o SociUT Main.o version.o -lmb.d -lrdmacm -libverbs -lxml2 -lmsoci.d -lboost_date_time -lboost_filesystem -lboost_system -lboost_serializion -lboost_thread -lboost_chrono -lgtest -lz -lnsl -lrt -ldl -lz -lcrypt -lnuma
最佳答案
这是 GCC PR 64234 .在某些时候我什至可能会修复它)
您可以改用动态运行时(即删除 -static-libasan
)吗?另一种选择是将 -lsoci_oracle.d
添加到 LDFLAGS
(这将通知 GCC 导出必要的符号)。或者您可以添加一个非常愚蠢的解决方法:强制引用代码中缺少的符号:
extern "C" void __asan_unregister_globals();
extern "C" void __asan_register_globals();
__attribute__((used)) void *force_missing_symbols[] = {
(void *)__asan_unregister_globals,
(void *)__asan_register_globals
};
(您需要为所有 缺失的符号执行此操作)。
关于c++ - -static-libasan 的 undefined symbol 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46682210/
当我使用 -fsanitize=address 进行编译时,GCC/Clang 隐式使用 ASAN 动态库,该库为 ASAN 提供运行时支持。如果您构建的库是由另一个应用程序动态加载的,则需要设置LD
我使用地址清理器清理我的应用程序,该应用程序与 SOCI 链接。但是在与 Oracle 一起使用时,该提示会跟随错误消息。 ./SociUT: symbol lookup error: /home/t
我通常为我的 c/c++ 程序使用 valgrind,但人们一直在推荐地址清理器,所以我想测试一下,但我在 redhat 系统上链接它时遇到问题。 我得到了以下代码: $ cat heap-use-a
我是一名优秀的程序员,十分优秀!