Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用GDC链接到废弃的TGL3_D_Dynamic Linking_Opengl 3_Gdc_Derelict3 - Fatal编程技术网

使用GDC链接到废弃的TGL3

使用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

TL;博士:

我如何从拥有DerelictGL3等人的源代码到使用GDC链接到它?

详细投诉:

我有一个用D写的小程序()

我正试图用以下命令构建这个程序。(我使用linux。)

我收到以下错误消息

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