Russian Qt Forum
Май 05, 2024, 17:22 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Помогите please! Компиляция со статическими библиотеками  (Прочитано 7723 раз)
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 все компилируется, но имеется куча ссылок на разные библиотеки.
Как мне добиться желаемого результата? Чего не хватает?
Записан
joktar
Гость
« Ответ #1 : Июнь 18, 2005, 06:39 »

1.Полностью статически неполучится(например из-за glibc), так ли это необходимо?Ведь если на машине есть KDE 3.x  то Qt там есть тоже(возможно более старая)
2.Qt по умолчанию собирается как dll, ее надо пересобрать, указав configure ключ -static вместо -shared(при этом ты также потеряеш возможность например использовать плагины в Qt
Записан
ANM
Гость
« Ответ #2 : Июнь 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
Записан
se
Гость
« Ответ #3 : Июнь 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
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.045 секунд. Запросов: 20.