Ошибка линковки

Модератор: Модераторы разделов

Аватара пользователя
Janik
Сообщения: 860
Статус: Оператор вычислительных машин
ОС: Debian

Ошибка линковки

Сообщение Janik »

Опять я со своим движком, на этот раз проблема на стадии линковки. Ну так вот, я использую загрузку разделяемых библиотек на лету (dlfcn.h). Компиляция происходит успешно. Но когда идет линковка, то ld ругается, что не анйдена библиотека gcc_s

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

make
g++ -O3 -fomit-frame-pointer -fpermissive `pkg-config --libs --cflags lua5.1`  -I../enet/include `sdl-config --cflags` -w -g -Xlinker -i -Xlinker -noinhabit-exec -o pyramid classes.o files.o sound.o pyramid.o text.o weapon.o  `sdl-config --libs` -L /usr/lib/  -ldl -ltokamak
pyramid.o: In function `main':
/home/user/miaj_proektoj/pyramid/engine/pyramid.cpp:38: warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/bin/ld: cannot find -lgcc_s
collect2: ld returned 1 exit status
make: *** [client] Ошибка 1

ЧЯДНТ?
Кто ищет, тот всегда найдет!
Опыт - это когда все получается с первого раза.
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Ошибка линковки

Сообщение watashiwa_daredeska »

Что выдают:
pkg-config --libs --cflags lua5.1
sdl-config --cflags
?

Зачем опции компилятора на стадии линковки (-O3, -fomit-frame-pointer и прочие --cflags)?

Зачем линкеру -i?
(man ld) писал(а):-i Perform an incremental link (same as option -r)
...
-r
--relocatable
Generate relocatable output---i.e., generate an output file that can in turn serve as input to ld.

Что такое -noinhibit-exec не знаю, в моих манах этого нет.
Помимо этого, линкер почему-то считает, что Вы пытаетесь линковать библиотеки статически.
Спасибо сказали:
Аватара пользователя
Janik
Сообщения: 860
Статус: Оператор вычислительных машин
ОС: Debian

Re: Ошибка линковки

Сообщение Janik »

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

pkg-config --libs --cflags lua5.1
-I/usr/include/lua5.1  -llua5.1

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

 sdl-config --cflags
-I/usr/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT


-noinhibit-exec -- это опция говорит линкеру не останавливаться на ошибках и слинковать файл (согласно ману).
Кто ищет, тот всегда найдет!
Опыт - это когда все получается с первого раза.
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: Ошибка линковки

Сообщение serzh-z »

Janik писал(а):
19.04.2010 18:38
ЧЯДНТ?
libgcc_s.a нет?
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Ошибка линковки

Сообщение watashiwa_daredeska »

user@localhost

$ cat >main.cpp <<EOF #include <iostream> using namespace std; int main() { cout << "Hello" << endl; return 0; } EOF $ g++ -c -o main.o main.cpp $ g++ -o main -Xlinker -noinhabit-exec main.o /usr/bin/ld: cannot find -lgcc_s collect2: ld returned 1 exit status $ g++ -o main main.o $ g++ --version g++ (Debian 4.4.3-7) 4.4.3 Copyright © 2009 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Хрень какая-то этот -noinhabit-exec.
Спасибо сказали:
Аватара пользователя
Janik
Сообщения: 860
Статус: Оператор вычислительных машин
ОС: Debian

Re: Ошибка линковки

Сообщение Janik »

serzh-z писал(а):
19.04.2010 19:45
libgcc_s.a нет?

Нет.

watashiwa_darede... писал(а):
19.04.2010 20:11
Хрень какая-то этот -noinhabit-exec.

Согласен.
Кто ищет, тот всегда найдет!
Опыт - это когда все получается с первого раза.
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Ошибка линковки

Сообщение watashiwa_daredeska »

Janik писал(а):
19.04.2010 20:45
serzh-z писал(а):
19.04.2010 19:45
libgcc_s.a нет?

Нет.
Его в принципе нет. По крайней мере, в репозиториях Debian.
Спасибо сказали: