Одни и те же версии Linux, CC, LD имеют разные правила порядка ссылок.Linux

Ответить Пред. темаСлед. тема
Гость
 Одни и те же версии Linux, CC, LD имеют разные правила порядка ссылок.

Сообщение Гость »


У меня есть настольный ПК и ноутбук, на которых работают одинаковые Linux (Ubuntu 22.04.4 LTS), но на настольном компьютере загружено несколько дополнительных компонентов, которые, как мне показалось, не имеют значения, оба используют gcc-12 в качестве «основного» " одна и та же версия "ld" - 2.38.
Содержимое /etc/ld-conf.d в каждом случае одинаковое
< p>Контекст: в настоящее время я работаю над общей библиотекой C с двумя модулями «symbols.o» и «stringvec.o». Я прикрепил «основную» процедуру к концу «symbols.c», пока отлаживаю эти модули, поэтому в целях вопроса я задаю вопрос о программе.
В make-файле есть:

Код: Выделить всё

CFLAGS=-g -I incl
LDFLAGS=-lm

all:    symbols

symbols: stringvec.o symbols.o
On both machines "make" gives

Код: Выделить всё

cc -g -I incl   -c -o symbols.o symbols.c
cc -g -I incl   -c -o stringvec.o stringvec.c
cc -lm  symbols.o stringvec.o   -o symbols
On the desktop the final step returns to the command prompt with "symbols" built but on the laptop it moans about symbols from "-lm" missing.

Код: Выделить всё

/usr/bin/ld: symbols.o: in function `getstringvalue':
/home/jmc/src/products/commonlib/symbols.c:176: undefined reference to `nearbyint'
/usr/bin/ld: symbols.o: in function `eval_tree':
/home/jmc/src/products/commonlib/symbols.c:433: undefined reference to `pow'
/usr/bin/ld: /home/jmc/src/products/commonlib/symbols.c:439: undefined reference to `fetestexcept'
/usr/bin/ld: /home/jmc/src/products/commonlib/symbols.c:441: undefined reference to `feclearexcept'
collect2: error: ld returned 1 exit status
make: *** [: symbols] Error 1
I can get round this easily by putting in the last part of the Makefile

Код: Выделить всё

$(CC) -o symbols stringvec.o symbols.o $(LDFLAGS)
But why the difference? Why is

Код: Выделить всё

--as-needed
turned on in one case but not the other? And why is the default make rule "wrong" as it were?
This only came up because I'd worked on it on the Desktop and thought I'd debugged it all and thought I'd just copy it to the laptop in case the urge to further fiddle with it over the next few days whilst I'm away was too strong.
I have tried

Код: Выделить всё

-Wl,--as-needed
in but that doesn't seem to help.
I did notice slightly different output with option to .


Источник: https://stackoverflow.com/questions/781 ... rder-rules
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Применить разные правила при нажатии на разные миниатюры (jQuery)
    Anonymous » » в форуме Jquery
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Применить разные правила при нажатии на разные миниатюры (jQuery)
    Anonymous » » в форуме CSS
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Одни и те же объекты в двух проектах, но разные реализации, созданные org.mapstruct.
    Anonymous » » в форуме JAVA
    0 Ответы
    31 Просмотры
    Последнее сообщение Anonymous
  • Почему cv.matchShapes иногда обнаруживает совершенно разные фигуры как одни и те же?
    Anonymous » » в форуме Python
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Почему cv.matchShapes иногда обнаруживает совершенно разные фигуры как одни и те же?
    Anonymous » » в форуме Python
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Linux»