Russian Qt Forum

Компиляторы и платформы => Компиляторы => Тема начата: se от Июнь 15, 2005, 15:08



Название: Помогите please! Компиляция со статическими библиотеками
Отправлено: se от Июнь 15, 2005, 15:08
Хочу создать программу, которая будет работать на другом компьютере, не имеющем вообще никаких библиотек, содержащем только ОС Linux. Программа не должна иметь динамически подключаемых библиотек, только статические (в ней самой). В свойствах проекта ставлю опцию -static. При запуске "make" на конечной стадии возникает ошибка:

g++  -o testpr main.o test.o testform.o moc_test.o moc_testform.o   -L/usr/lib/qt3//lib -L/usr/X11R6/lib -static -lqt-mt -lXext -lX11 -lm
/usr/bin/ld: cannot find -lqt-mt
collect2: ld returned 1 exit status

Без опции -static все компилируется, но имеется куча ссылок на разные библиотеки.
Как мне добиться желаемого результата? Чего не хватает?


Название: Помогите please! Компиляция со статическими библиотеками
Отправлено: joktar от Июнь 18, 2005, 06:39
1.Полностью статически неполучится(например из-за glibc), так ли это необходимо?Ведь если на машине есть KDE 3.x  то Qt там есть тоже(возможно более старая)
2.Qt по умолчанию собирается как dll, ее надо пересобрать, указав configure ключ -static вместо -shared(при этом ты также потеряеш возможность например использовать плагины в Qt


Название: Помогите please! Компиляция со статическими библиотеками
Отправлено: ANM от Июнь 20, 2005, 09:50
Цитата: "joktar"
Полностью статически неполучится(например из-за glibc)

glibc запросто линкуется статически.
Код:
#include <iostream>
int main()
{
 std::cout << "Hello" << std::endl;
 return 0;
}

компилируем без ключа -static
    dron@hal:~$ /lib/ld-linux.so.2 --list ./test2
            libstdc++.so.5 => /usr/lib/libstdc++.so.5 (0x40006000)
            libm.so.6 => /lib/libm.so.6 (0x400bd000)
            libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x400e0000)
            libc.so.6 => /lib/libc.so.6 (0x400e8000)
            /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x80000000)

с ключем -static
    dron@hal:~$ /lib/ld-linux.so.2 --list ./test2
            statically linked


Название: Помогите please! Компиляция со статическими библиотеками
Отправлено: se от Июнь 21, 2005, 13:26
Спасибо за участие.
На целевом компьютере стоит только ОС Linux без KDE3.x и т.п. Там не ничего.
Цель - создать приложение, использующее минимум shared библиотек (лучше без них вообще).
Я так понимаю мне предлагается переустановить Qt с ключем -static?
Без плагинов не могу.
Новая информация к размышлению: убрал из проекта поток, при сборке компилятор выдает следующее:

g++ -c -pipe -Wall -W -O2 -fomit-frame-pointer -pipe -march=i586 -mtune=pentiumpro  -DQT_NO_DEBUG -DQT_SHARED -DQT_THREAD_SUPPORT -I/usr/lib/qt3/mkspecs/default -I. -I/usr/lib/qt3//include -o moc_testform.o moc_testform.cpp
g++  -o testpr main.o test.o testform.o moc_test.o moc_testform.o   -L/usr/lib/qt3//lib -L/usr/X11R6/lib -static -lqt-mt -lXext -lX11 -lm
/usr/bin/ld: cannot find -lXext
collect2: ld returned 1 exit status
make: *** [testpr] Ошибка 1

Причем даже если убрать -DQT_SHARED - все равно появляется эта ошибка!
Может у меня чего-то не доустановлено (какой-нибудь develop'ерский пакет)? Qt у меня 3.3.3