#c #linux
#c #linux
Вопрос:
Я пытаюсь «создать» ioquake3 на компьютере IBM. Но я продолжал получать сообщение об ошибке «пропуск несовместимого / libSDL.a при поиске -lSDL». Я абсолютный новичок в Linux, но не лодырь! У меня нет прав на установку каких-либо библиотек, и наш администратор сервера не отвечает уже около недели. Итак, сейчас я гуглил / тестировал в поисках решения. Как говорилось в сообщении, библиотека, которая находится в системе, несовместима. Итак, я зашел на сайт Ubuntu и загрузил библиотеку SDL PPC заново. Я загрузил, распаковал его в указанную папку. Однако GCC не знает, где находятся эти библиотеки. Итак, я нашел что-то под названием «LD_LIBRARY_PATH=»~/minoru/cfe2/yasirTemp/ioquake3dev/zzz /pkgs /usr /lib», чтобы сообщить GCC, где находятся мои библиотеки. Однако каждый раз, когда я делаю «make», я не добавляю свою папку «export» в список.
Пожалуйста, помогите, даже другим способом, просто исправить мою проблему с несовместимой библиотекой SDL.
ниже приведен вывод:
<pre>rmc104:~/minoru/cfe2/yasirTemp/ioquake3dev/svfb_201110271440/ioquake3dev_clean[7188]% echo $LD_LIBRARY_PATH
~/minoru/cfe2/yasirTemp/ioquake3dev/zzz/pkgs/usr/lib
rmc104:~/minoru/cfe2/yasirTemp/ioquake3dev/svfb_201110271440/ioquake3dev_clean[7189]% cd ~/minoru/cfe2/yasirTemp/ioquake3dev/zzz/pkgs/usr/lib
rmc104:~/minoru/cfe2/yasirTemp/ioquake3dev/zzz/pkgs/usr/lib[7190]% ls
libSDL.a libSDL.la libSDL.so@ libSDLmain.a libopenal.a libopenal.so@ pkgconfig/
rmc104:~/minoru/cfe2/yasirTemp/ioquake3dev/zzz/pkgs/usr/lib[7191]%</pre>
<pre>rmc104:~/minoru/cfe2/yasirTemp/ioquake3dev/svfb_201110271440/ioquake3dev_clean[7174]% make
make[1]: Entering directory `/r/home7/yasir/minoru/cfe2/yasirTemp/ioquake3dev/svfb_201110271440/ioquake3dev_cleanamp;#39;
Building ioquake3 in build/release-linux-ppc64:
PLATFORM: linux
ARCH: ppc64
VERSION: 1.36
COMPILE_PLATFORM: linux
COMPILE_ARCH: ppc64
CC: cc
CFLAGS:
-MMD
-Wall
-fno-strict-aliasing
-Wimplicit
-Wstrict-prototypes
-pipe
-DUSE_ICON
-I/usr/include/SDL
-D_GNU_SOURCE=1
-D_REENTRANT
-DUSE_OPENAL
-DUSE_CURL
-maltivec
-Icode/SDL12/include
-m64
-DUSE_MUMBLE
-DUSE_VOIP
-DFLOATING_POINT
-DUSE_ALLOCA
-Icode/libspeex/include
-DUSE_LOCAL_HEADERS
-DPRODUCT_VERSION=amp;quot;1.36amp;quot;
-DNDEBUG
-O3
-ffast-math
-funroll-loops
-fomit-frame-pointer
LDFLAGS:
LIBS:
-ldl
-lm
Output:
build/release-linux-ppc64/ioq3ded.ppc64
build/release-linux-ppc64/ioquake3.ppc64
build/release-linux-ppc64/baseq3/cgameppc64.so
build/release-linux-ppc64/baseq3/qagameppc64.so
build/release-linux-ppc64/baseq3/uippc64.so
build/release-linux-ppc64/missionpack/cgameppc64.so
build/release-linux-ppc64/missionpack/qagameppc64.so
build/release-linux-ppc64/missionpack/uippc64.so
make[2]: Entering directory `/r/home7/yasir/minoru/cfe2/yasirTemp/ioquake3dev/svfb_201110271440/ioquake3dev_cleanamp;#39;
make[2]: `build/release-linux-ppc64/ioq3ded.ppc64amp;#39; is up to date.
LD build/release-linux-ppc64/ioquake3.ppc64
/usr/bin/ld: skipping incompatible /usr/lib/libSDL.so when searching for -lSDL
/usr/bin/ld: skipping incompatible /usr/lib/libSDL.a when searching for -lSDL
/usr/bin/ld: skipping incompatible /usr/lib/gcc/powerpc-linux-gnu/4.4.5/../../../libSDL.so when searching for -lSDL
/usr/bin/ld: skipping incompatible /usr/lib/gcc/powerpc-linux-gnu/4.4.5/../../../libSDL.a when searching for -lSDL
/usr/bin/ld: skipping incompatible /usr/lib/libSDL.so when searching for -lSDL
/usr/bin/ld: skipping incompatible /usr/lib/libSDL.a when searching for -lSDL
/usr/bin/ld: cannot find -lSDL
collect2: ld returned 1 exit status
make[2]: *** [build/release-linux-ppc64/ioquake3.ppc64] Error 1
make[2]: Leaving directory `/r/home7/yasir/minoru/cfe2/yasirTemp/ioquake3dev/svfb_201110271440/ioquake3dev_cleanamp;#39;
make[1]: *** [targets] Error 2
make[1]: Leaving directory `/r/home7/yasir/minoru/cfe2/yasirTemp/ioquake3dev/svfb_201110271440/ioquake3dev_cleanamp;#39;
make: *** [release] Error 2
rmc104:~/minoru/cfe2/yasirTemp/ioquake3dev/svfb_201110271440/ioquake3dev_clean[7175]% ls</pre>
Ответ №1:
LD_LIBRARY_PATH
определяет путь поиска общих библиотек во время выполнения. Вы хотите указать, где находится библиотека во время компиляции. Вы можете использовать LDFLAGS
для этого — с -L
помощью переключателя вы можете задать путь поиска для библиотек: make LDFLAGS=-L/path/to/your/SDL
.
Возможно, двоичный файл SDL, который вы получили из Ubuntu, все еще может не работать из-за несовместимой версии и т. Д. В этом случае я предлагаю загрузить и создать SDL самостоятельно.
Комментарии:
1. Спасибо за ответ. Я попробовал ваше предложение. Я вижу добавленный флаг в вывод. Но новый путь поиска не отображается в «поисковых» каталогах. Это путь, который мне нужен, чтобы добавить тот, который содержит файлы .so, или какой?
2. Да, это путь к файлам .so. Компилируется ли он при установке LDFLAGS?
3. Я обнаружил, что libSDL.so является 32-разрядным, когда моя машина 64-разрядная. Итак, я внес некоторые изменения, скомпилировал новый libSDL.a amp; libSDL.so , и скопировал их в мою папку «make». Теперь я вижу путь «./» в путях поиска при компиляции. Однако, когда я «file -L ./libSDL.so » Я замечаю, что даже недавно составленные libSDL.so является 32-битным, а не 64-битным!! Как я прошу «сделать» для libSDL.so скомпилировать их в 64-разрядные, а не 32-разрядные версии?
4. Я только что узнал, что наш сервер debian «не обеспечивает 64-разрядную компиляцию». Знаете ли вы вариант, при котором я могу добавить в команду «make» для компиляции в 32-разрядном формате?
5. Я нашел это: make BASE_CFLAGS=-m32