将C语言.obj文件链接到Delphi应用程序,解决标准C依赖问题。

4

我用BCC 5.5命令行编译器编译了libxml2,现在有很多.obj文件,我想将它们链接到我的Delphi应用程序中。不幸的是,我遇到了很多“未满足的前向或外部声明”错误,指向标准C库函数,如memcpy、open、recv等...

我该怎么做才能正确编译它?我希望避免依赖于msvcrt.dll或任何其他外部库。

提前感谢!

3个回答

14
根据您所拥有的Delphi版本,应该有一个名为crtl.dcu的单元可以供您链接。只需在使用crtl的单元中为每个.obj文件使用$L指令。您可能还需要“使用”其他各种单元,例如Windows、WinSock等等...重点是在链接阶段提供符号和函数以解析。
这是用于静态链接DataSnap TClientDataSet代码的相同技术,该代码也用于构建midas.dll。

很遗憾,在我的Delphi7 PE安装中没有crtl单元。 - migajek
听起来是升级至至少 D2007 的绝佳理由;-) - Allen Bauer

3

1
欢迎来到Stack Overflow。这是一篇不错的文章,但为了让它成为更好的答案,您应该解释为什么这是一篇好的阅读文章。告诉读者可以期待什么。特别是,该文章描述了两种解决问题的技术。一种是手动实现所有缺失的函数。(文章进行了演示。)另一种方法是链接msvcrt.dll,它已经实现了所有缺失的函数。(文章也进行了演示。)第二种方法对于像printf这样难以在Delphi中轻松实现的函数尤其有用。 - Rob Kennedy
此外,MSVC++可以使用asm生成选项进行编译,然后ml.exe将所需的obj转换为Delphi中的$L。 - Sergei Krivonos

0

不要使用那些函数,而是重写它们以直接调用操作系统函数(kernel32/system32)。


我正在编译的C代码是libxml2,它相当复杂,我希望避免对其进行任何更改。 - migajek
@michal:您知道有几十个免费的Delphi包装器可用于LibXML2,对吧?这是其中一个,由Marco Cantu推荐:http://sourceforge.net/projects/libxml2-pas。Marco的博客推荐可以在http://blog.marcocantu.com/blog/delphicomps.html找到。 - Ken White
是针对哪个版本的libxml2呢?有很多不同的构建版本。 - Marco van de Voort
哦,我不知道...是从libxml2页面检出的那个吗? - migajek
我知道这一点。我只是想避免额外的dll文件。 - migajek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接