Как связать библиотеку, скомпилированную с помощью g ++ (Ubuntu), с программой, скомпилированной с помощью g ++ (raspbian)? - PullRequest
0 голосов
/ 06 июня 2018

У меня есть библиотека (назовем ее libmylib.so ), которая должна была быть построена с использованием докера Ubuntu 16. Я хотел бы использовать эту библиотеку в программе (назовем ее myapp ) Я хочу скомпилировать мой Raspbian с малиновым пи.

При компиляции я получаю выходной журнал этой формы:

[25%] Building CXX object example1.cpp.o
[50%] Building CXX object example2.cpp.o
[75%] Building CXX object example3.cpp.o
[100%] Linking CXX executable target

А потом куча ошибок вида:

undefined reference to `VTT for std::__cxx11::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >@GLIBCXX_3.4.21'
undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_assign(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@GLIBCXX_3.4.21'
collect2: error: ld returned 1 exit status

Из того, что я могнайти в Интернете, это кажется из-за того, что я не компилирую libmylib.so и myapp с одним и тем же компилятором.

Я использую g ++ в обоихслучаи, но не одной и той же версии, как можно увидеть, когда я вызываю g ++ --version на обоих устройствах.

Из моего докера:

root@3ea34286736e:/usr/bin# g++ --version
g++ (Ubuntu 5.4.0-6ubuntu1~16.04.6) 5.4.0 20160609

Из моего малинового PI

pi@raspberrypi:/usr/bin $ g++ --version
g++ (Raspbian 4.9.2-10+deb8u1) 4.9.2

Это полный разрыв сделки или есть способ заставить его работать?

РЕДАКТИРОВАТЬ: Здесь это то, что я прочитал, что заставляет меня предположитьэто проблема версии компилятора.

Это и , это , похоже, было похоже на ошибки, к которым исправление было добавлено в cmake myapp :

add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0)

, который не работал.

Добавление этого флага в опции компиляции libmylib.so уменьшило количество неопределенных ошибок ссылокот 10 до 1. Точнее:

undefined reference to `std::invalid_argument::invalid_argument(char const*)@GLIBCXX_3.4.21'

1 Ответ

0 голосов
/ 07 июня 2018

Компиляция libmylib как статической библиотеки, а не как общей, как-то решала проблему.

...