Связывание с разделяемыми библиотеками

67
6

Я пытаюсь скомпилировать и связать некоторый.c файл. Я использую Eclipse IDE для разработчиков C/C++, и на моей локальной машине я могу скомпилировать без проблем. Однако, когда я пытаюсь скомпилировать и связать один и тот же файл в ОС RedHat (версия gcc - 4.9.2-6 в этой ОС), у меня проблемы. Я получаю некоторые предупреждения во время компиляции, но все в порядке, я думаю, я просто проигнорировал и приложение все еще работает нормально. Вот команды, которые я выполнил, и связанный с ними вывод:

gcc -O0 -g3 -Wall -c -fmessage-length=0 -std=c99 -MMD -MP -MF"example.d" -MT"example.d" -o "example.o" "example.c"

warning: suggest parentheses around assignment used as truth value [-Wparentheses]
warning: implicit declaration of function ‘wait [-Wimplicit-function-declaration]

Это создает два файла example.d и example.o. Затем я попытаюсь связать их без везения со следующей командой:

gcc -Xlinker -L/usr/lib -lrt -static -pthread example.o -o example
/usr/bin/ld: cannot find -lrt
/usr/bin/ld: cannot find -lpthread
/usr/bin/ld: cannot find -lc
collect2: error: ld returned 1 exit status

Команды берутся непосредственно из тех, которые генерирует Eclipse, и отлично работают на моем локальном компьютере (Ubuntu OS), но не в среде RedHat. Последняя команда не работала с опцией -L и без нее. Я полагаю, что каталог в -L прекрасен, поскольку я запускаю, например,

locate libpthread.so 

И одно из мест, которые я получаю, это /usr/lib (также /usr/lib64, но не работает).

Любая помощь будет оценена!! :)

спросил(а) 2015-10-06T04:09:00+03:00 4 года, 10 месяцев назад
1
Решение
67

Если вы попытаетесь связать статический исполняемый файл, он будет искать *.a версии библиотек, а не то, что вы обычно хотите. Удалите флаг -static. Или вы можете установить статические библиотеки, если хотите. Также не обязательно добавлять -L/usr/lib явно.

ответил(а) 2015-10-06T07:01:00+03:00 4 года, 10 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема