1

在此处的基本示例之后,我正在尝试使用广告程序之外的 c++ 函数。

我正在使用标准 d 编译器和当前版本的 TDM gcc mingw 包。

要将 *.o 文件从 elf32 格式转换为 omf32,我使用 objconf objconv -f omf test.o testCpp.obj

当我尝试链接它时,我得到了错误

>dmd test.d testCpp.obj
OPTLINK (R) for Win32  Release 8.00.12
Copyright (C) Digital Mars 1989-2010  All rights reserved.
http://www.digitalmars.com/ctg/optlink.html
testCpp.obj(testCpp)
 Error 42: Symbol Undefined __ZSt4cout
testCpp.obj(testCpp)
 Error 42: Symbol Undefined __ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_
T0_ES6_
testCpp.obj(testCpp)
 Error 42: Symbol Undefined __ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5
_PKc
testCpp.obj(testCpp)
 Error 42: Symbol Undefined __ZNSolsEi
testCpp.obj(testCpp)
 Error 42: Symbol Undefined __ZNSolsEPFRSoS_E
testCpp.obj(testCpp)
 Error 42: Symbol Undefined __ZNSt8ios_base4InitD1Ev
testCpp.obj(testCpp)
 Error 42: Symbol Undefined __ZNSt8ios_base4InitC1Ev
test.obj(test)
 Error 42: Symbol Undefined ?foo@@YAHHHH@Z (int cdecl foo(int ,int ,int ))
--- errorlevel 8

如果我尝试将转换后的libstdc++.a文件链接到它,它会变得更糟。

我正在使用窗户。

4

1 回答 1

2

C++ 函数中的代码使用来自 C++ 标准库(例如 cout)的符号,它不与 D 程序链接。您需要将 C++ 标准库与 D 程序链接(尽管尚不清楚它如何与 D 运行时一起工作,或者如何让 GCC 的 C++ 运行时与 DMC 的 C 运行时一起工作),或者删除所有使用C++ 代码中的 C++ 标准库。

您可能会发现使用带有 D 可执行文件的 C++ DLL 会更容易。

于 2013-08-04T08:26:22.817 回答