链接器问题与Linux中的dmd和Derelict:Ld找不到.a文件

时间:2013-03-08 01:41:19

标签: linker dmd

我正在尝试使用Derelict2绑定在D中编写测试程序。这是我的代码:

import std.stdio;
import derelict.sfml.audio;

pragma(lib, "/home/ryan/Derelict2/lib/libDerelictSFMLAudio.a");
pragma(lib, "/home/ryan/Derelict2/lib/libDerelictUtil.a");


void main(){
  DerelictSFMLAudio.load();
}

所有被遗弃的.di文件都在dmd的默认导入目录中,所以我认为以下命令应该编译并链接我的程序。

dmd test.d -L-lDerelictSFML -L-lDerelictUtil -L-ldl

但是,我收到此错误:

/usr/bin/ld: cannot find -lDerelictSFML
/usr/bin/ld: cannot find -lDerelictUtil
collect2: error: ld returned 1 exit status
--- errorlevel 1

我究竟做错了什么?

有点偏离主题,但也是一个问题:

-ldl标志有什么作用?我知道这是成功链接所必需的,但我不确定它是怎么做的,而不是在ld手册中。

1 个答案:

答案 0 :(得分:1)

您还需要将库位置(例如-L-L / usr / lib / dmd)传递给dmd:

dmd test.d -I/usr/include/d -L-L/usr/lib/dmd -L-lDerelictSFML -L-lDerelictUtil -L-ldl

-ldl代表libdl,它是一个允许程序动态链接到库的库。