Ошибка компоновщика: неопределенная ссылка на символ 'pthread_rwlock_trywrlock@@GLIBC_2.2.5'

Я разрабатывал с CentOS, Qt 4.7 и GCC 4.4

Я только что установил Red Hat Developer Toolset 1.1, который включает GCC 4.7.2, и в конце makeЯ получаю ошибку

/usr/bin/ld: ../../bin/Solo: undefined reference to symbol 'pthread_rwlock_trywrlock@@GLIBC_2.2.5'
/usr/bin/ld: note: 'pthread_rwlock_trywrlock@@GLIBC_2.2.5' is defined in DSO /lib64/libpthread.so.0 so try adding it to the linker command line
/lib64/libpthread.so.0: could not read symbols: Invalid operation
collect2: error: ld returned 1 exit status

Я предполагаю, что потоки Qt ссылаются на это. Как я могу это исправить?

4 ответа

Решение

Вы хотите скомпилировать с -pthread который делает больше, чем просто ссылка на libpthread:

Добавляет поддержку многопоточности с библиотекой pthreads. Эта опция устанавливает флаги для препроцессора и компоновщика.

Вам просто нужно добавить CONFIG += thread на ваш .pro файл.

Прочитайте заметку: попробуйте добавить /lib64/libpthread.so.0 в Makefile (-lpthread после gcc команда или /lib64/libpthread.so.0 после ld (или после gcc -shared)) или что-то вроде LIB += -lpthread если где-то есть такое определение.

Смотрите также: Добавление внешней библиотеки в проект Qt Creator и http://www.qtcentre.org/threads/39144-How-to-add-a-lib-to-a-qt-project

Кстати, опубликуйте свой Makefile, чтобы кто-нибудь смог указать точную строку.

В моем маленьком ноутбуке Linux (где у меня смешанный пакет библиотек) мне просто нужно было добавить

LDFLAGS=-lpthread

В конце аргументов команды configure.

После этого make отлично справился со своей задачей (с существующими библиотеками).

Я получил аналогичные ошибки "Ошибка компоновщика: неопределенная ссылка на символ" при попытке скомпилировать и установить Python-3.7.2 во FreeBSD 12.

/usr/bin/ld: error: undefined symbol: _Py_GetGlobalVariablesAsDict
/usr/bin/ld: error: undefined symbol: _PyCoreConfig_AsDict
/usr/bin/ld: error: undefined symbol: _PyMainInterpreterConfig_AsDict

Решено путем прохождения LDFLAGS=-lpthread непосредственно сделать из lang/python37 или добавив в /etc/make.conf, При использовании portmaster для установки / обновления используйте -m передать аргумент, чтобы сделать, например,portmaster -a -m 'LDFLAGS=-lpthread'

Другие вопросы по тегам