TL과 DerelictGL3에 연결, DR :GDC
어떻게 GDC와 함께, 그것에 연결에, DerelictGL3 등의 소스를 가지고에서받을 수 있나요?
자세한 불만 :
난 다음 명령을 사용하여이 프로그램을 빌드하기 위해 노력하고있어 (http://dlang.org)
module controller;
import std.stdio;
import std.conv;
import std.exception;
import derelict.opengl3.gl3;
import derelict.glfw3.glfw3;
void main()
{
DerelictGL3.load();
DerelictGLFW3.load();
if(!glfwInit())
throw new Exception("Failure");
scope(exit) glfwTerminate();
}
D.로 작성된 작은 프로그램이 있습니다. (리눅스에 있습니다.)
gdc -o "${BLD}controller" \
"/home/user/Source/d/controller.d" \
"-I/home/user/Source/DerelictOrg/DerelictUtil/source/" \
"-I/home/user/Source/DerelictOrg/DerelictGL3/source/" \
"-I/home/user/Source/DerelictOrg/DerelictGLFW3/source/" \
-I/usr/include/d2 \
-L -lDerelictUtil \
-L -lDerelictGL3 \
-L -lDerelictGLFW3 \
-L -ldl
다음과 같은 오류 메시지가 나타납니다.
controller.d:(.text+0x3b): undefined reference to
`_D8derelict7opengl33gl311DerelictGL3C8derelict7opengl33gl317DerelictGL3Loader'
controller.d:(.text+0x4c): undefined reference to
`_D8derelict7opengl33gl311DerelictGL3C8derelict7opengl33gl317DerelictGL3Loader'
controller.d:(.text+0x58): undefined reference to
`_D8derelict5glfw35glfw313DerelictGLFW3C8derelict5glfw35glfw319DerelictGLFW3Loader'
controller.d:(.text+0x69): undefined reference to
`_D8derelict5glfw35glfw313DerelictGLFW3C8derelict5glfw35glfw319DerelictGLFW3Loader'
controller.d:(.text+0x75): undefined reference to
`_D8derelict5glfw35glfw38glfwInitPUNbZi'
controller.d:(.text+0xf7): undefined reference to
`_D8derelict5glfw35glfw313glfwTerminatePUNbZv'
/tmp/ccTqE9NN.o:(.data+0x28): undefined reference to
`_D8derelict7opengl33gl312__ModuleInfoZ'
/tmp/ccTqE9NN.o:(.data+0x30): undefined reference to
`_D8derelict5glfw35glfw312__ModuleInfoZ'
collect2: error: ld returned 1 exit status
GDC로 전달하는 인수 중 원본 파일의 이름이 정확하지 않다는 것이 확실합니다. 모든 -L 행을 주석 처리하면 동작이 동일합니다. -I 줄을 주석 처리하면 다음과 같이 표시됩니다.
controller.d:6: error: module gl3 is in file 'derelict/opengl3/gl3.d'
which cannot be read
그러나 잘 배치 된 라이브러리로 해결할 수 있다고 생각합니다.
DerelictGL3 등의 소스를 GDC와 연결하려면 어떻게해야합니까?
편집 : 나는/usr/bin /에 libDerelictGL3.a, libDerelictGLFW3.a 및 libDerelictUtil.a을 설치 한 확신한다.
기타 생각 : 나는 소스에 대해 컴파일해야하는 이유에 대해 정말로 혼란 스럽다. 이것은 C++가 아니며 헤더 파일이 없습니다. -I 줄을 빼면 컴파일러는 gl3 모듈을 여는 방법을 모른다. 단지 내가 사용했던 함수가 존재한다는 것을 추론해서는 안되며, 찾을 수없는 경우 링커 에러가 발생합니까? 라이브러리를 컴파일하고 검색 경로에있는 동안 왜 GDC가 나머지를 파악할 수 없습니까?
더 생각 : 는 최근이 경우 Can't link GLFW3: undefined references 가, 영업 이익은 그들이 동적 연결을 시도 되었기 때문에 그들이 아니라 .A 형태보다 .so는 형태로 자신의 라이브러리를 필요로 발견 발견했다. 나는 그것을 조사 중이다.
퍼즐의 또 다른 조각 : 나는 오히려 버려진에 연결하는 데 문제가보다 지금
-I/usr/include/d2 \
-L -ldl \
-L/usr/bin \
-lDerelictUtil \
-lDerelictGL3 \
-lDerelictGLFW3
내 GDC 호출의 관련 부분을 변경 한 , 나는 문제에 연결을 가진 것으로 나타 _d_runtime 자체.
출력은 다음과 비슷한 수백입니다 : 따라서
/usr/bin/libDerelictGL3.a(libDerelictGL3.o): In function
`_D3std5array18__T8AppenderTAPxaZ8Appender13ensureAddableMFNaNbNfmZv':
/home/user/Source/ldc-developers/ldc/runtime/phobos/std/array.d:2231:
undefined reference to `_d_allocmemoryT'
, 내 문제가 _d_runtime에/usr/빈 아닌 다른 (즉 잘못된 이름이라면 용서), 때 것을 믿습니다/usr/bin에 -L 경로를 겹쳐 씁니다. (lib 디렉토리를 두었던 곳이기 때문에) 문제가 있습니다. 그 중 하나, 또는 나는 처음에 D를 잘못 설치했다. 그러나 두 경우 모두 위에서 언급 한 예제에서 실제로 libDerelictGL3.a를 찾고 있습니다! =)
분명히하기 위해 "소스를 잊어 버리고 apt-get를 사용하십시오"라는 형식의 대답도 환영합니다. 그 길도별로 행운이 없었어요. – kd8azz
-lphobos2 또는 -lgphobos2 또는 그와 유사한 것을 추가하여 어떤 일이 일어나는지보십시오. –
의견을 보내 주셔서 감사합니다. @ AdamD.Ruppe; 고맙게도 나는 어리석은 실수를 발견했다. – kd8azz