dmd链接器(OPTLINK)在使用extern时给出错误42:符号未定义

时间:2011-12-25 20:44:58

标签: d dmd

链接以下两个文件会给我一个链接错误:

A.D:

import std.stdio;

extern string test ();

void main() {
    writeln(test());
    readln();
}

b.d:

string test () {
    return "hello";
}

我得到的错误是:

Error 42: Symbol Undefined _D1a4testFZAya`

---errorlevel 1

有什么问题?

__ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ _

编辑:这是正确的方法:

A.D:

import std.stdio;
import b;

void main() {
   writeln("some_var from Module b: \"", b.some_var, "\"");
}

b.d:

public string some_var = "Hello, world!";

//you can also use static module constructors to set your vars
static this() {
   some_var ~= " -- How are you?";
}

该代码由Joshua Reusch在digitalmars.com网站的excellent D forum for beginners中提供。

1 个答案:

答案 0 :(得分:4)

a.d修改为:

import std.stdio;
import b;

//extern string test ();

void main() {
  writeln(test());
  readln();
}

extern是一个链接属性,主要用于指定用于给定函数的调用约定(通常是某个库中的C函数)。有关extern和其他属性的更多信息,请访问:http://www.d-programming-language.org/attribute.html。如果你只有D源文件,那么就不需要extern。但是,如果你混合C或C ++和D代码,你肯定必须使用它。