Странная ошибка - неопределенная ссылка при ссылке на собственную библиотеку gcc - PullRequest
0 голосов
/ 07 сентября 2018

У меня мало опыта в создании и компоновке библиотек, но на этот раз я схожу с ума от этой глупости.

-bash-3.2$ g++ -m32 src/main.cpp -Iinc -lblpapi3_32 -I/tmp/diff/include -L/tmp/diff/lib -lbbbmds
/tmp/ccQCKwnF.o: In function `main':
main.cpp:(.text+0x14e): undefined reference to `MDS::BloombergSource::BloombergSource()'
main.cpp:(.text+0x4ed): undefined reference to `MDS::BloombergSource::startSession()'
main.cpp:(.text+0x555): undefined reference to `MDS::BloombergSource::openService()'
main.cpp:(.text+0x560): undefined reference to `MDS::BloombergSource::authorize()'
main.cpp:(.text+0x5fc): undefined reference to `MDS::BloombergSource::AddSubscription(char const*, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, BloombergLP::blpapi::CorrelationId const&)'
main.cpp:(.text+0x655): undefined reference to `MDS::BloombergSource::subscribe()'
collect2: ld returned 1 exit status

Подтвердил, что моя библиотека имеет ссылку на эти функции, например, ниже

-bash-3.2$ nm /tmp/diff/lib/libbbbmds.so |grep startSession
0000000000002a62 t _ZN3MDS15BloombergSource12startSessionEv

Дальнейшее подтверждение,

-bash-3.2$ c++filt _ZN3MDS15BloombergSource12startSessionEv
MDS::BloombergSource::startSession()

Также,

-bash-3.2$ file /tmp/diff/lib/libbbbmds.so
/tmp/diff/lib/libbbbmds.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), not stripped

Попытка изменить порядок libs / src.

1 Ответ

0 голосов
/ 07 сентября 2018

nm выходные списки MDS::BloombergSource::startSession() функция как t - функция с внутренней связью. Такие функции недоступны в других единицах перевода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...