Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > GNU toolchain > В объектном файле нет символов нек-х функций


Автор: Feldsher 2.1.2014, 20:01
Ребята, всех с наступившим Новым годом!

Подскажите, пожалуйста, в таком вопросе - средствами MinGW собираю динамическую библиотеку из нескольких исходников,  в результирующих объектных файлах нет символов некоторых функций.

Функции типа void, прототипы объявлены в заголовочных файлах, имплеметации - в файлах исходников.

Флаги компиляции
Код
gcc -c -shared -O2 -DNDEBUG -Isrc f1.c f2.c f3.c 
,
флаги компоновки - 
Код

gcc -shared   f1.o  f2.o  f3.o \
-Wl,--export-all-symbols \
-Wl,--out-implib=libsuper.dll.a \
-Wl,--as-needed \
-o libsuper.dll -lssp


Компиляция идёт без сбоев, при компоновке - несколько ошибок "undefined reference" и и одна "bad reloc address". При просмотре объектных файлов символы требуемых функций вообще отсутствуют. Подскажите пожалуйста, как это исправить.

Заранее спасибо!

Автор: Cheloveck 2.1.2014, 20:29
gcc -fPIC -shared ...

Автор: leniviy 2.1.2014, 20:31
Цитата(Feldsher @ 2.1.2014,  20:01)
флаги компоновки - 
Код

gcc -shared   f1.o  f2.o \
-Wl,--export-all-symbols \
-Wl,--out-implib=libsuper.dll.a \
-Wl,--as-needed \
-o libsuper.dll -lssp


Компиляция идёт без сбоев, при компоновке - несколько ошибок "undefined reference"

f1.o и f2.o есть. А где f3.o ?

Добавлено через 4 минуты и 27 секунд
Цитата(Cheloveck @  2.1.2014,  20:29 Найти цитируемый пост)
gcc -fPIC -shared ...

под виндой-то? Вроде бы такое только под -m64 нужно, и то не уверен

Автор: Фантом 2.1.2014, 20:50
Цитата(Feldsher @  2.1.2014,  21:01 Найти цитируемый пост)

Подскажите, пожалуйста, в таком вопросе - средствами MinGW собираю динамическую библиотеку из нескольких исходников,  в результирующих объектных файлах нет символов некоторых функций.

f3.o куда делся?

Автор: Feldsher 2.1.2014, 21:43
Спасибо. Эти моменты неоднократно перепроверял.
shared - флаг компоновки, проверял. fPIC в этой версии MinGW включен по умолчанию (при его явном указании появляется предупреждение о том, что он флаг уже  активирован и его повторное объявление игнорируется).
Список объектных файлов дал как пример, их около 30, компилируются все. Но в существующем объектнике нет символа реализованной в соответствующем исходнике функции.
Просматриваю объектник через nm, название функции в выводе не отображается

Автор: Feldsher 3.1.2014, 05:42
Код
gcc -c -shared 
 shared не указал из-за "ачипятки")

Автор: tzirechnoy 3.1.2014, 11:39
Попробуйте сократить количество файлов до единственного "ошыбочного", и из него выкинуть всё, кроме объявления "ошыбочной функцыи.
Результат можэте запостить сюда, если сами к тому времени не поймёте что случилось.

PS Да, вангую static в имплементацыи функцыи.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)