Неопределенная символьная ошибка с -static-libasan

Я использую адресное дезинфицирующее средство для дезинфекции моего приложения, которое связано с SOCI. Но это быстрое сообщение об ошибке followijg при использовании с 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

1

Решение

Это GCC PR 64234. В какой-то момент я даже смогу починить)

Можете ли вы использовать вместо этого динамическую среду выполнения (т.е. удалить -static-libasan)? Еще один вариант добавления -lsoci_oracle.d в LDFLAGS (это сообщит GCC для экспорта необходимых символов). Или вы можете добавить действительно глупый обходной путь, то есть заставить ссылку на отсутствующий символ в вашем коде:

extern "C" void __asan_unregister_globals(void *globals, size_t n);
void *force_missing_symbol = (void *)__asan_unregister_globals;

(вам нужно сделать это для все отсутствующие символы, прототипы могут быть получены из этот заголовок).

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]