2017-10-11 3 views
1

Ich benutze Adressen-Sanitizer, um meine Anwendung, die mit SOCI verknüpft ist, zu bereinigen. Aber diese Aufforderung followijg Fehlermeldung bei der Verwendung mit Oracle.Undefinierter Symbolfehler mit -static-libasan

./SociUT: symbol lookup error: /home/testhome/libs/libsoci_oracle.d.so.1.4.18: undefined symbol: __asan_unregister_globals 

Hier ist der Build-Ausgabe von aplication

/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 

Antwort

1

Diese GCC PR 64234 ist. Irgendwann kann ich sogar zu reparieren)

Können Sie stattdessen dynamische Laufzeit (d. H. Entfernen -static-libasan)? Eine andere Option ist das Hinzufügen von -lsoci_oracle.d zu LDFLAGS (dies würde GCC informieren, um notwendige Symbole zu exportieren). Oder Sie können eine wirklich dumme Abhilfe heißt hinzufügen aus dem Code, um fehlendes Symbol eine Referenz erzwingen:

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

(Sie müssen dies tun, für all fehlende Symbole können Prototypen von this header erhältlich).

+0

Was sind die LDFLAGS? – Janaka

+0

@ Janaka: Linker Flags. – yugr

+0

In diesem Fall muss ich meine Anwendung unabhängig von Oracle halten. Das wird also keine gute Lösung für mich sein. – Janaka

Verwandte Themen