2009-11-09 2 views
1

я получаю следующее сообщение об ошибке при попытке компиляции моего приложения:Нет правила, чтобы сделать цель ... libm.a

*** No rule to make target `/mypath/lib/libm.a', needed by `/myPath/bin/appName' 

Почему компоновщик ищет libm.a по абсолютному пути?

+0

Вам необходимо разместить свой файл makefile, чтобы узнать, что с ним не так. – kdt

+0

Он-он, держу пари, он не нуждается *, но, конечно же, это было бы очень приятно :) –

+0

Итак, Nathan, любые комментарии? Образцы кода, которые не работают? Что-нибудь? –

ответ

4

Я начинаю думать о программировании для коммутации психической карьеры ...

Почему компоновщик ищет libm.a по абсолютному пути?

Потому что вы сказали ему сделать это. Скорее всего вы набрали

# There were some rules that build your own .a libs 
myLib.a: ... 
    ... 

# Handy rule to direct your libs into lib/ folder! 
vpath %.a /mypath/lib 

appName: appName.o libm.a 
    g++ $^ -o [email protected] 

Огонь! Вам нужна «система» libm.a (это математическая библиотека, часть glibc), но make считает, что вам нужна ваша собственная статическая библиотека. Затем он добавляет правильный префикс и не находит никакого правила переделывать libm.a.

Решение может быть перемещено libm.a из предпосылок. Это цель скрипта configure или специального назначения make sanity, чтобы проверить наличие системных библиотек.

EXT_LIBS=libm.a 

appName: appName.o 
    g++ $^ $(EXT_LIBS) -o [email protected] 
+0

Сообщение об ошибке от make, а не от компоновщика, поэтому этот ответ, скорее всего, правильный. –

Смежные вопросы