Как установить путь поиска библиотеки для 64-битных библиотек для g ++ в Ubuntu? - PullRequest
4 голосов
/ 29 ноября 2011

Попытка скомпилировать что-нибудь для 64-битного Unix с помощью Ubuntu. Как заявление об отказе от ответственности, я начал использовать linux и gcc только несколько дней назад, поэтому все еще учусь. В любом случае, получаю следующую ошибку:

/ home / myuser / myproject / myfile.cpp: 437: неопределенная ссылка на `clock_gettime '

Быстрый Google показывает, что мне нужна опция -lrt для связи с librt.a. Поэтому я проверяю свою командную строку (отформатирован для удобства чтения, разных имен файлов и удаляю списки имен файлов):

/usr/bin/g++ 
-Wl,
--gc-sections 
-fno-exceptions 
-m64 
-B/usr/bin 
-o 
"/home/myuser/myproject" 
-Wl,
-Map, "/home/myuser/myproject/myproject.map" 
-g  
"/home/myuser/myproject/myproject.cpp.obj" 
..and some more .objs..
-Xlinker 
--start-group  
"-lpthread"  
"-lrt"
"/home/myuser/myproject/lib/mylib.a" 
..and some more .as..
-Xlinker 
--end-group 

Хм. Похоже, что -lrt уже есть, может быть, у меня нет librt.a? Нет поиска по всем файлам показывает, что у меня /usr/lib/x86_64-linux-gnu/librt.a. Я думаю, что g ++ ищет не в том месте. Поэтому в приведенной выше командной строке я заменяю -lrt на /usr/lib/x86_64-linux-gnu/librt.a и bingo! он компилируется и ссылки нормально. К сожалению, это автоматизированный инструмент, и мне нужно, чтобы он работал на многих компьютерах, и я не могу делать предположения о местонахождении librt.a, поэтому он мне действительно нужен для работы с -lrt. Итак, как мне установить путь поиска в локальной библиотеке? Первая попытка - изменить переменную окружения LD_LIBRARY_PATH, но, по-видимому (из того, что я могу сказать по поиску в Google) это игнорируется в Ubuntu, и вместо этого я должен возиться с файлами .conf в /etc/ld.so.conf.d/, однако я уже похоже, у меня уже есть x86_64-linux-gnu.conf со следующими строками:

# Multiarch support
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu

Из того, что я прочитал выше, похоже, что это все, что мне нужно. Вид застрял в том, куда идти дальше ...

1 Ответ

1 голос
/ 29 ноября 2011

Отвечая на мой вопрос на случай, если у кого-то еще возникнет эта проблема.Оказывается, что правильный librt.a был связан, но компоновщик очень чувствителен к порядку ссылок.Помещение -lrt и -lpthread в конец группы решает проблему.

...