пропуск несовместимого /libSDL.a при поиске -lSDL

#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