使用GDC链接到废弃的TGL3
TL;博士: 我如何从拥有DerelictGL3等人的源代码到使用GDC链接到它? 详细投诉: 我有一个用D写的小程序() 我正试图用以下命令构建这个程序。(我使用linux。) 我收到以下错误消息使用GDC链接到废弃的TGL3,d,dynamic-linking,opengl-3,gdc,derelict3,D,Dynamic Linking,Opengl 3,Gdc,Derelict3,TL;博士: 我如何从拥有DerelictGL3等人的源代码到使用GDC链接到它? 详细投诉: 我有一个用D写的小程序() 我正试图用以下命令构建这个程序。(我使用linux。) 我收到以下错误消息 controller.d:(.text+0x3b): undefined reference to `_D8derelict7opengl33gl311DerelictGL3C8derelict7opengl33gl317DerelictGL3Loader' controller.d:(.te
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不能找出其余的呢
更多想法:
我最近发现
在这种情况下,OP发现他们需要.so表单而不是.a表单中的库,因为他们正在尝试动态链接。我目前正在调查此事
另一个难题:
我已将gdc调用的相关部分更改为
-I/usr/include/d2 \
-L -ldl \
-L/usr/bin \
-lDerelictUtil \
-lDerelictGL3 \
-lDerelictGLFW3
现在,我似乎在链接到_d_运行时本身时遇到了问题,而不是链接到Derricit时遇到了问题
输出有数百行,与以下内容类似:
/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/bin之外的某个位置,当我重写/usr/bin的-L路径时(因为我把libs放在那里),我很难找到它。要么是这样,要么我一开始就安装错了。但在上述两种情况下,它实际上都是在上述示例中查找libDerelictGL3.a!=) Edit:我想我遗漏了用gdc构建derelice的实际行
dub --compiler=gdc
我在每个废弃软件包的源目录中执行了这个操作,并将lib/to/usr/bin的内容复制到了其中
我已经弄明白了。是时候彻底地“为下一个家伙”了 我不久前开始了这个项目,但我忘了我是从使用ldc开始的,ldc是一个基于llvm的D编译器。出于某种原因,我将/usr/bin/dmd2符号链接到本地构建的ldmd2,作为新的二进制文件存放在源目录中。我对各种废弃项目的构建使用了dub,然后使用了ldmd2,因此是d运行时的本地(可能是分叉的)副本 基本上,项目的其余部分设置正确。为了下一个家伙,以下是我的剧本的结尾:
gdc -o "/home/user/Build/controller" \
"/home/user/Source/d/controller.d" \
-I/usr/include/d \
"-I/home/user/Source/DerelictOrg/DerelictUtil/source/" \
"-I/home/user/Source/DerelictOrg/DerelictGL3/source/" \
"-I/home/user/Source/DerelictOrg/DerelictGLFW3/source/" \
-lDerelictUtil \
-lDerelictGL3 \
-lDerelictGLFW3 \
-ldl
有趣的是,ldc vs gdc的错误一直到我在这里发布的日志。很遗憾,我没有仔细阅读自己的日志。为了清楚起见,我们也非常感谢“忘记源代码,使用apt-get”这样的答案。我对这条路线也不太幸运。尝试添加-lphobos2或-lgphobos2或类似的内容,看看会发生什么。谢谢您的评论,@AdamD.Ruppe;谢天谢地,我发现了我(愚蠢的)错误。酷,当它允许你的时候,别忘了接受你自己的答案
dub --compiler=gdc
gdc -o "/home/user/Build/controller" \
"/home/user/Source/d/controller.d" \
-I/usr/include/d \
"-I/home/user/Source/DerelictOrg/DerelictUtil/source/" \
"-I/home/user/Source/DerelictOrg/DerelictGL3/source/" \
"-I/home/user/Source/DerelictOrg/DerelictGLFW3/source/" \
-lDerelictUtil \
-lDerelictGL3 \
-lDerelictGLFW3 \
-ldl