Я пытаюсь скомпилировать мой проект на C++ в Linux x64 с помощью boost-библиотек 1.57.Ссылка об ошибке «неопределенная ссылка» об увеличении статической библиотеки во время компиляции
Этот проект скомпилирован с помощью scons, и я успешно скомпилировал его на моем Arch Linux, но на этот раз не удалось запустить машину Ubuntu.
Я добавил -lboost_coroutine
флаг для связи, но ошибка «неопределенная ссылка» все еще существовала.
/usr/bin/g++ -o build/gcc.release/app -pthread -g
build/gcc.release/src/han/unity/rpcx.o
-lpthread -lz -lboost_coroutine -lboost_context -lboost_date_time
build/gcc.release/src/han/unity/rpcx.o: In function `attributes':
/usr/local/include/boost/coroutine/attributes.hpp:31: undefined reference
to `boost::coroutines::stack_traits::default_size()'
Я заметил, что атрибуты.hpp являются точно одним из файлов заголовков форматирования сопрограмм. И я попробовал с nm, чтобы увеличить библиотеки coroutine, и это, кажется, не проблема.
nm /usr/local/lib/libboost_coroutine.a | grep "default_size"
0000000000000170 T _ZN5boost10coroutines12stack_traits12default_sizeEv
Я искал возможные причины этой ошибки, и большинство из них касалось порядка флажков компоновщика. И в этом случае rpcx.o зависит от boost_coroutine, поэтому это появляется впереди.
Что еще может быть причиной?
Попробуйте подключить 'libboost_thread' после libboost_coroutine. –
Спасибо за ваш комментарий. Я пробовал, но не работал – Han
Если вы можете создать его с помощью scons, включите подробный вывод отладки с использованием 'VERBOSE = 1', вы должны увидеть команды, которые используются для создания вашего приложения. –