处理__turboFloat和Borland工具链

时间:2015-10-15 10:58:39

标签: c c++builder borland-c++

我一直试图重新确定一个XP时代.dll使用微软的Uniscribe,可能的VCL和其他工件进行一些音译。它当时是用一些Borland工具链编译的,我交给的项目包括来自Visual Studio,.mrt和.mbt文件的.res文件,这些文件似乎也是与GUI相关的.ide文件,它们是Borland C ++项目文件,。 dsw Turbo C上下文文件(在文本编辑器中打开它们 - 它们也可以是VC6文件... shuders),. bpr BCB.04.04 / BCB IDE文件,.dfm字体相关文件和.bpg BWS.01文件。我觉得自己像个数字印第安纳琼斯,减去鞭子和灰尘让我打喷嚏。

我从Embarcadero获得了一个Borland工具链并使用了Code :: Blocks,只有-Weverything行中的某个地方进入了编译器参数,Borland不喜欢这些参数。 LLVM的Clang目前在winnt.h上进行barfs(我不想编辑),比如

\um\winnt.h:1341:1: error: C++ requires a type specifier for all declarations

Visual Studio的编译器完全禁止其他东西(虽然没有太多打扰),我不记得MinGW / GCC在哪里停止。

由于一堆或不同的错误,我不得不摆弄包含和库(主要是来自Embarcadero的include \和lib)和编译器标志(当前_NO_VCL _MSC_VER = 1200 BUILD_DLL),甚至不会打扰警告。使用cmd行编译这个项目(其中一个.bpr文件和Embarcadero的documentation作为参考)我设法用这个编译.obj:

"C:\path\to\bcc32.exe" -w -tWM -tWD -y -vi- -v -a8 -r- -Od -D_NO_VCL -D_MSC_VER=1200 
    -I"C:\path\to\include\windows\crtl" 
    -I"C:\path\to\include\windows\vcl" 
    -I"C:\path\to\include\windows\rtl" 
    -I"C:\path\to\baseProjectDir" 
    -I"C:\path\to\baseProjectDir\subDir" 
    -oobj\Debug\myFile.obj -c ..\file1.cpp ..\subDir\file2.cpp ..\subDir\file3.cpp ..\subDir\file4.cpp

耶。当我尝试linking时,这种乐趣仍在继续:

"C:\path\to\ILINK32.EXE" /aa /Tpd /x /Gn /Gi /q 
    /L"C:\path\to\baseProjectDir;C:\path\to\baseProjectDir\subDir;C:\path\to\lib\win32\debug;C:\path\to\lib\win32\release" 
    "C:\path\to\myFile.obj"

我得到:

Error: Unresolved external '__turboFloat' referenced from root
Error: Unable to perform link

Googlefu告诉我这是某种Borland供应商锁定的东西,所以我改变了我的链接线:

"C:\path\to\ILINK32.EXE" /aa /Tpd /x /Gn /Gi /q 
    /L"C:\path\to\baseProjectDir;C:\path\to\baseProjectDir\subDir;C:\path\to\lib\win32\debug;C:\path\to\lib\win32\release" 
    "C:\path\to\lib\win32\release\c0d32.obj" "C:\path\to\myFile.obj"

......现在它确实击中了粉丝:

Error: Unresolved external '__dbk_fcall_wrapper' referenced from C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\17.0\LIB\WIN32\RELEASE\C0D32.OBJ
Error: Unresolved external 'GetVersion' referenced from C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\17.0\LIB\WIN32\RELEASE\C0D32.OBJ
Error: Unresolved external '__ErrorMessage' referenced from C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\17.0\LIB\WIN32\RELEASE\C0D32.OBJ
Error: Unresolved external '___CRTL_DLL_Lock' referenced from C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\17.0\LIB\WIN32\RELEASE\C0D32.OBJ
Error: Unresolved external '___CRTL_VCL_Init' referenced from C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\17.0\LIB\WIN32\RELEASE\C0D32.OBJ
Error: Unresolved external '___CRTL_MEM_UseBorMM' referenced from C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\17.0\LIB\WIN32\RELEASE\C0D32.OBJ
Error: Unresolved external '___CRTL_VCLLIB_Linkage' referenced from C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\17.0\LIB\WIN32\RELEASE\C0D32.OBJ
Error: Unresolved external '__ExceptInit' referenced from C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\17.0\LIB\WIN32\RELEASE\C0D32.OBJ
Error: Unresolved external '__pRawDllMain' referenced from C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\17.0\LIB\WIN32\RELEASE\C0D32.OBJ
Error: Unresolved external '__startupd' referenced from C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\17.0\LIB\WIN32\RELEASE\C0D32.OBJ
Error: Unresolved external '__free_heaps' referenced from C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\17.0\LIB\WIN32\RELEASE\C0D32.OBJ
Error: Unresolved external '___CRTL_VCL_Exit' referenced from C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\17.0\LIB\WIN32\RELEASE\C0D32.OBJ
Error: Unresolved external '___CRTL_DLL_Unlock' referenced from C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\17.0\LIB\WIN32\RELEASE\C0D32.OBJ
Error: Unresolved external '__GetExceptDLLinfoInternal' referenced from C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\17.0\LIB\WIN32\RELEASE\C0D32.OBJ
Error: Unresolved external 'HeapAlloc' referenced from C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\17.0\LIB\WIN32\RELEASE\C0D32.OBJ
Error: Unresolved external '___CRTL_TLS_SetValue' referenced from C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\17.0\LIB\WIN32\RELEASE\C0D32.OBJ
Error: Unresolved external '___CRTL_TLS_InitThread' referenced from C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\17.0\LIB\WIN32\RELEASE\C0D32.OBJ
Error: Unresolved external 'GetProcessHeap' referenced from C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\17.0\LIB\WIN32\RELEASE\C0D32.OBJ
Error: Unresolved external 'HeapFree' referenced from C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\17.0\LIB\WIN32\RELEASE\C0D32.OBJ
Error: Unresolved external '___CRTL_TLS_ExitThread' referenced from C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\17.0\LIB\WIN32\RELEASE\C0D32.OBJ
Error: Unresolved external '___CRTL_TLS_Free' referenced from C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\17.0\LIB\WIN32\RELEASE\C0D32.OBJ
Error: Unresolved external '___CRTL_TLS_Alloc' referenced from C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\17.0\LIB\WIN32\RELEASE\C0D32.OBJ
Error: Unresolved external 'DllEntryPoint' referenced from C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\17.0\LIB\WIN32\RELEASE\C0D32.OBJ
Error: Unresolved external '__argv_expand_ptr' referenced from C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\17.0\LIB\WIN32\RELEASE\C0D32.OBJ
Error: Unresolved external '__wargv_expand_ptr' referenced from C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\17.0\LIB\WIN32\RELEASE\C0D32.OBJ
Error: Unresolved external '__handle_setargv' referenced from C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\17.0\LIB\WIN32\RELEASE\C0D32.OBJ
Error: Unresolved external '__handle_exitargv' referenced from C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\17.0\LIB\WIN32\RELEASE\C0D32.OBJ
Error: Unresolved external '__handle_wsetargv' referenced from C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\17.0\LIB\WIN32\RELEASE\C0D32.OBJ
Error: Unresolved external '__handle_wexitargv' referenced from C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\17.0\LIB\WIN32\RELEASE\C0D32.OBJ
Error: Unresolved external '__fileinfo' referenced from C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\17.0\LIB\WIN32\RELEASE\C0D32.OBJ
Error: Unresolved external '___CRTL_TLS_GetValue' referenced from C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\17.0\LIB\WIN32\RELEASE\C0D32.OBJ
Error: Unresolved external '__turboFloat' referenced from root
Error: Unable to perform link

我在这里有点不知所措。任何提示都会非常感激。

1 个答案:

答案 0 :(得分:1)

forums11 years old post的一些指示后,我在链接行添加了一些额外的.obj,即cw32mt.libimport32.lib,以便最后一行看起来像这样的东西(YMMV):

ilink32.exe -q 
-L"C:\path\to\lib\win32c\debug" 
-L"C:\path\to\lib\win32\debug" 
-LC:\MinGW\lib 
-LC:\path\to\myProject 
-Tpd /DEBUG 
obj\Debug\subDir\file1.obj
obj\Debug\subDir\file2.obj,
bin\Debug\final.dll,,C:\path\to\myProject\some.lib 
"C:\path\to\lib\win32c\debug\cw32mti.lib" 
"C:\path\to\lib\win32c\debug\import32.lib",,

一行,有一些,,且没有空格。 Code :: Blocks也很方便。