SDL2와 GLEW를 사용하는 OpenGl 응용 프로그램을 컴파일하려고 시도하고 있는데, 원래 컴파일 된 곳이 아닌 모든 버전의 Linux에서 실행될 수 있습니다. 이렇게하기 위해, 나는 어떤 것도 작동하지 않는 몇 가지 것을 시도했다.Linux에서 SDL2 및 GLEW 응용 프로그램을 정적으로 컴파일하려면 어떻게해야합니까?
각 라이브러리의 웹 사이트 다운로드에서 GLEW 및 SDL의 압축을 푼 루트 디렉토리에 make를 실행하여 생성 된 .a 파일에 직접 연결을 시도했습니다. 이것은 다음과 같은 오류 발생 : 나는 건물을 시도
/usr/bin/ld: /opt/SDL2-2.0.4/build/.libs/libSDL2.a(SDL_syssem.o): undefined reference to symbol '[email protected]@GLIBC_2.2.5'
//lib/x86_64-linux-gnu/libpthread.so.0: error adding symbols: DSO missing from command line
을 나는 어떤 점 I에서,하지만 -static
를 추가 (pkg-config --libs sdl2
및 pkg-config --libs glew
와) 크로스 플랫폼 기능을 제외하고 잘 작동 동적 링크 라이브러리와 마찬가지로 다음과 같은 오류를 얻을 :
/usr/bin/ld: cannot find -lGLEW
/usr/bin/ld: cannot find -lGL
내 정적으로 컴파일 GLEW 라이브러리를 가리 키도록 이전 시나리오를 변경할 때, 나는 많은 SDL 기능에서 다음과 같이 정의되지 않은 참조 오류와 함께 OpenGL을 함수에 대한 정의되지 않은 참조 오류를 얻을. -lGL을 추가해도 아무 것도 바뀌지 않습니다.
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libSDL2.a(SDL_dynapi.o): In function `SDL_InitDynamicAPI':
/usr/bin/ld: cannot find -lasound
/usr/bin/ld: cannot find -lpulse-simple
/usr/bin/ld: cannot find -lpulse
/usr/bin/ld: cannot find -lsndio
/usr/bin/ld: cannot find -lwayland-egl
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libwayland-cursor.a(libwayland_cursor_la-xcursor.o): In function `XcursorImagesDestroy':
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libXcursor.a(file.o):(.text+0x7d0): first defined here
/usr/bin/ld: cannot find -lGLEW
/usr/bin/ld: cannot find -lGL
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libX11.a(GetDflt.o): In function `GetHomeDir.part.0':
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libX11.a(GetDflt.o): In function `GetHomeDir.part.0':
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libX11.a(xim_trans.o): In function `_XimXTransSocketINETConnect':
collect2: error: ld returned 1 exit status
참고 : 나는 모든 라이브러리 pkg-config --libs --static <library name>
를 사용하려고하면
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libSDL2.a(SDL_dynapi.o): In function `SDL_InitDynamicAPI':
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libSDL2.a(SDL_dynapi.o): In function `SDL_InitDynamicAPI':
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libSDL2.a(SDL_dynapi.o): In function `SDL_InitDynamicAPI':
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libSDL2.a(SDL_sysloadso.o): In function `SDL_LoadObject_REAL':
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libSDL2.a(SDL_sysloadso.o): In function `SDL_LoadObject_REAL':
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libSDL2.a(SDL_sysloadso.o): In function `SDL_LoadFunction_REAL':
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libSDL2.a(SDL_sysloadso.o): In function `SDL_LoadFunction_REAL':
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libSDL2.a(SDL_sysloadso.o): In function `SDL_LoadFunction_REAL':
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libSDL2.a(SDL_sysloadso.o): In function `SDL_UnloadObject_REAL':
, 나는 다음과 같은 오류가 출력의 모든 위의 명령에서 g++ -o /path/to/outputExecutable <list of object files>.o <libraries as described above>
주 : 나는하지 않음 이 질문은 스택 교환 네트워크에 관한 다른 질문과 중복되는 것이라고 생각합니다. 왜냐하면 저는 약 1 개월 반 동안 이것을 알아 내려고 노력했기 때문에이 질문들을 매우 많이 보았습니다. 비록 문제가 근본 문제와 다르다.
참고 : 이것은 닫힌 소스 응용 프로그램이므로 동적 연결은 옵션이 아니므로 사용자가 자신의 시스템에 바이너리를 빌드 할 수 있도록 소스 코드를 배포해야합니다.
참고 : 현재 g ++를 통해 Linux로 컴파일하려고하지만 mingw를 사용하여이 응용 프로그램을 Windows 용으로도 배포하려고합니다. 거기에서 작동하는 조언은 Linux 전용 조언보다 바람직하지만, 여기서 끝낼 부분에서 그 부분을 파악할 수 없는지 다른 질문을 할 수 있습니다.
참고 : 저는 우분투 16.04 LTS x64를 사용하여 컴파일하고 있습니다.
이 질문에 대한 답변을 미리 보내 주셔서 감사합니다. 죄송하지만, 가능한 한 많은 정보를 제공하고 싶었습니다. 나는 어떤 대답을 기대합니다!
"나는 우분투 16.04 LTS x64를 사용하여 컴파일하고 있습니다." 아냐, 데비안 구시대에서 모든 것을 다시 빌드하고 구축해야한다. – genpfault