gpt4 book ai didi

d - 使用 GDC 链接到 DerelictGL3

转载 作者:行者123 更新时间:2023-12-01 05:08:30 25 4
gpt4 key购买 nike

TL;博士:

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

详细投诉:

我有一个用 D 编写的小程序。 (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();
}

我正在尝试使用以下命令构建该程序。 (我在Linux上。)
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
在这种情况下,OP 发现他们需要 .so 形式的库,而不是 .a 形式,因为他们正在尝试动态链接。我目前正在对此进行调查。

另一个难题:
我已将我的 gdc 调用的相关部分更改为
-I/usr/include/d2 \
-L -ldl \
-L/usr/bin \
-lDerelictUtil \
-lDerelictGL3 \
-lDerelictGLFW3

现在,我似乎在链接到 _d_runtime 本身时遇到了问题,而不是在链接到 Derelict 时遇到了麻烦。

输出是类似于这些的数百行:
/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 以外的某个地方,并且当我将 -L 路径覆盖到/usr/bin 时(因为那是我放置库的地方)我很难找到它。要么是这样,要么我只是首先安装了 D 错误。但无论哪种情况,它实际上都是在上述示例中找到 libDerelictGL3.a ! =)

最佳答案

编辑:我想我省略了使用 gdc 构建 Derelict 的实际行。

dub --compiler=gdc

我在每个废弃包的源目录中执行此操作,并将 lib/的内容复制到/usr/bin。

我已经想通了。是时候对“下一个人”进行彻底的后现代了。

我前段时间开始了这个项目,我忘记了我开始使用 ldc,一个基于 llvm 的 D 编译器。出于某种原因,我将/usr/bin/dmd2 符号链接(symbolic link)到 ldmd2 的本地构建,作为源目录中的新二进制文件。我构建的各种 DerelictOrg 项目使用 dub,然后使用 ldmd2,因此是 d 运行时的本地(可能是 fork)副本。

基本上,项目的其余部分设置正确。为了下一个人,我的脚本最终是这样的:
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 的错误一直到我在这里发布的日志中。太糟糕了,我没有足够仔细地阅读自己的日志。

关于d - 使用 GDC 链接到 DerelictGL3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26704385/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com