LINUX.ORG.RU

Проблема с линковкой при сборке

 ,


0

1

Собираю development-версию Hedgewars, как здесь описано. После make install выдаёт следующее:

(9015) Linking /home/eugeno/Projects/Hedgewars/trunk/bin/hwengine
/usr/bin/ld.bfd.real: warning: /home/eugeno/Projects/Hedgewars/trunk/bin/link.res contains output sections; did you forget -T?
/usr/bin/ld.bfd.real: cannot find -lstdc++
hwengine.pas(558,1) Error: (9013) Error while linking
hwengine.pas(558,1) Fatal: (10026) There were 1 errors compiling module, stopping
Fatal: (1018) Compilation aborted
Error: /usr/bin/ppcx64 returned an error exitcode (normal if you did not specify a source file to be compiled)

Но пакет libstdc++6-4.4-dev у меня установлен, и раньше при сборке такой проблемы не было. Какие будут соображения?

★★★★★

На всякий случай кастану unC0Rr.

eugeno ★★★★★
() автор топика

Чуть выше должна быть строка запуска компилятора.

пакет libstdc++6-4.4-dev

Он линкеру вообще не нужен. Ему нужен без -dev. Т.е. сами библиотеки.

ziemin ★★
()

в качестве предположения... может у тебя 64 битная система, а для линковки нужна 32 битная либа? проверь на всякий случай.

elijah_sd
()
Ответ на: комментарий от ziemin

Чуть выше должна быть строка запуска компилятора.

[  6%] Generating ../bin/hwengine
Free Pascal Compiler version 2.4.0-2 [2010/02/20] for x86_64
Copyright (c) 1993-2009 by Florian Klaempfl
(1002) Target OS: Linux for x86-64
(3104) Compiling hwengine.pas
...
(3104) Compiling uCommandHandlers.pas
(9015) Linking /home/eugeno/Projects/Hedgewars/trunk/bin/hwengine
/usr/bin/ld.bfd.real: warning: /home/eugeno/Projects/Hedgewars/trunk/bin/link.res contains output sections; did you forget -T?
/usr/bin/ld.bfd.real: cannot find -lstdc++
hwengine.pas(558,1) Error: (9013) Error while linking
hwengine.pas(558,1) Fatal: (10026) There were 1 errors compiling module, stopping
Fatal: (1018) Compilation aborted
Error: /usr/bin/ppcx64 returned an error exitcode (normal if you did not specify a source file to be compiled)

Он линкеру вообще не нужен. Ему нужен без -dev. Т.е. сами библиотеки.

Но они тоже установлены.

eugeno ★★★★★
() автор топика
Ответ на: комментарий от elijah_sd

в качестве предположения... может у тебя 64 битная система, а для линковки нужна 32 битная либа? проверь на всякий случай.

32-битная тоже установлена, вот только -dev пакета для Squeeze не существует.

eugeno ★★★★★
() автор топика
Ответ на: комментарий от eugeno

Поищи в настройках линкера, где каталоги библиотек указываются. Возможно он её реально найти не может.

ziemin ★★
()
Ответ на: комментарий от ziemin

Поищи в настройках линкера, где каталоги библиотек указываются. Возможно он её реально найти не может.

Шоб я знал, где настройки этого линкера.

eugeno ★★★★★
() автор топика
Ответ на: комментарий от ziemin

Он линкеру вообще не нужен. Ему нужен без -dev. Т.е. сами библиотеки.

как раз наоборот, линкеру нужен -dev, где будет ссылка .so -> .so.x.y

alex_custov ★★★★★
()
Ответ на: комментарий от exception13

Даже и не подумаю. В -dev пакетах по определению лежат .h к библиотекам. Они нужны только разработчикам. На целевой платформе -dev не нужны.

ziemin ★★
()
Ответ на: комментарий от ziemin

Даже и не подумаю. В -dev пакетах по определению лежат .h к библиотекам. Они нужны только разработчикам. На целевой платформе -dev не нужны.

в -dev пакетах кроме .h есть еще и симлинки .so -> .so.x.y ибо линкер не может в ту магию которую умеет ld-linux

exception13 ★★★★★
()
Ответ на: комментарий от exception13

Это называется костыли. Линкеру по определению достаточно указать каталог с либами.

ziemin ★★
()
Ответ на: комментарий от ziemin
serge@silvertablet:~/stuff/development/tmp/libsqlite3-dev/CONTENTS$ find ./
./
./usr
./usr/lib
./usr/lib/arm-linux-gnueabihf
./usr/lib/arm-linux-gnueabihf/libsqlite3.so
./usr/lib/arm-linux-gnueabihf/libsqlite3.a
./usr/lib/arm-linux-gnueabihf/libsqlite3.la
./usr/lib/arm-linux-gnueabihf/pkgconfig
./usr/lib/arm-linux-gnueabihf/pkgconfig/sqlite3.pc
./usr/share
./usr/share/doc
./usr/share/doc/libsqlite3-dev
./usr/share/doc/libsqlite3-dev/changelog.Debian.gz
./usr/share/doc/libsqlite3-dev/copyright
./usr/share/doc/libsqlite3-dev/changelog.gz
./usr/share/doc/libsqlite3-dev/changelog.html.gz
./usr/include
./usr/include/sqlite3ext.h
./usr/include/sqlite3.h

не благодари

exception13 ★★★★★
()
Ответ на: комментарий от ziemin

Покажи ls из каталога пакета

bin
cmake_modules
Fonts_LICENSE.txt
misc
ChangeLog.txt
COPYING
gameServer
project_files
CMakeCache.txt
CPackConfig.cmake
hedgewars
QTfrontend
CMakeFiles
CPackSourceConfig.cmake
INSTALL
README
cmake_install.cmake
CREDITS
Makefile
share
CMakeLists.txt
doc
man
tools

ну и сразу INSTALL.txt

http://pastebin.com/6NhpPV6T

eugeno ★★★★★
() автор топика
Ответ на: комментарий от exception13

Лучше бы ls */*/*

Ты меня не убедил. Пока что я вижу пару библиотек (вероятнее всего отладочных, собственно для этого ссылки и нужны).

ziemin ★★
()
Ответ на: комментарий от ziemin

Ты меня не убедил. Пока что я вижу пару библиотек (вероятнее всего отладочных, собственно для этого ссылки и нужны).

okay. у меня _одновременно_ стоит libfoo1, libfoo2, libfoo3 т.е. имею libfoo.so.1, libfoo.so.2 и libfoo.so.3 какую версию будет юзать линкер?

exception13 ★★★★★
()
Ответ на: комментарий от ziemin

Нет, сначала я делаю

cmake -DCMAKE_BUILD_TYPE="DEBUG" -DCMAKE_INSTALL_PREFIX="$HOME/games" -DDATA_INSTALL_DIR="$HOME/games" -DNOSERVER=1 -DNOVIDEOREC=1

и потом

make install

Здесь он и спотыкается.

eugeno ★★★★★
() автор топика
Ответ на: комментарий от ziemin

Я к тому, что просто так её не укажут в инструкции. Если что я не большой специалист по cmake. Судя по всему он заменяет ./configure

ziemin ★★
()
Ответ на: комментарий от ziemin

С точкой то же самое, так что она не играет роли.

eugeno ★★★★★
() автор топика
Ответ на: комментарий от ziemin

Текущую. Если она не содержит нужных функций, то вывалится с криками «что вы мне подсунули!!1»

а какая текущая? линкер берет -lfoo и ищет libfoo.so о постфиксах с версией он ничего не знает.

exception13 ★★★★★
()
Последнее исправление: exception13 (всего исправлений: 1)
Ответ на: комментарий от ziemin

Попробуй с ней. Ну и да - между попытками не забывай делать clean.

Не выходит, всё то же самое. make clean делал.

eugeno ★★★★★
() автор топика
Ответ на: комментарий от exception13

а какая текущая

Та, которая просто .so. Обычно это ссылка на определённую (точнее последнюю) версию.

Если API коренным образом меняется (без обратной совместимости), то обычно меняется и название.

ziemin ★★
()
Ответ на: комментарий от ziemin

Та, которая просто .so. Обычно это ссылка на определённую (точнее последнюю) версию.

вот мы и подошли к логическому завершению. есть libfoo1, libfoo2, libfoo3 (libfoo.so.1, libfoo.so.2, libfoo.so.3) и libfoo-dev который и содержит кроме .h ту самую ссылку (libfoo.so -> libfoo.so.[123] в зависимости от своей версии).

exception13 ★★★★★
()
Ответ на: комментарий от ziemin

Единственное, что я могу предположить это то, что нужно указать какие-нибудь переменные (типа LIB_PATH). Где ледит libstdc++?

ziemin ★★
()
Ответ на: комментарий от exception13

вот мы и подошли к логическому завершению

Нет. Ты не дочитал до конца. Зря я проо обратно совместимые в скобки поместил.

ziemin ★★
()

Попробуй бранч cmake_pascal. Последнее время koda всё что-то меняет в системе сборки - вопросы к нему. У меня компилится и в винде, и во фряхе.

unC0Rr ★★★★★
()
Ответ на: комментарий от ziemin

Всякий раз, как ты пытался вывод cmake/make был одинаковый?

Абсолютно.

eugeno ★★★★★
() автор топика
Ответ на: комментарий от unC0Rr
make VERBOSE=1

будет более полезен

Да то же самое вывел.

eugeno ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.