2015-10-15 41 views
3

我一直在試圖通過微軟的Uniscribe,VCL和其他工件來做一些音譯來保證XP時代的.dll文件。它是在當時用一些Borland工具鏈編譯的,我交給的項目包括Visual Studio的.res文件,.mrt和.mbt文件,這些文件似乎也是與GUI相關的,.ide文件是Borland C++項目文件。 dsw Turbo C上下文文件(在文本編輯器中打開它們 - 它們也可以是VC6文件... shuders),.bpr BCB.04.04/BCB IDE文件,.dfm字體相關文件和.bpg BWS.01文件。我感覺像一個數字印第安納瓊斯,減去鞭子和灰塵讓我打噴嚏。處理__turboFloat和Borland工具鏈

我從Embarcadero那裏得到了一個Borland工具鏈,並且正在使用Code :: Blocks,只有-Weverything行中的某處進入了Borland不喜歡的編譯器參數。 LLVM的鏘目前barfs在WINNT.H(我寧願不修改),對這樣的東西

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

Visual Studio的得也快編譯barfs完全(不打擾它了,雖然)我不記得MinGW/GCC停止的地方。

由於一堆或不同的錯誤,我不得不擺弄includes和libs(主要是來自Embarcadero的include \和lib)和編譯器標記(目前_NO_VCL _MSC_VER = 1200 BUILD_DLL),甚至不會打擾與警告。使用CMD行編譯這個項目(與.bpr文件之一,英巴卡迪諾的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 

我有點不知所措。任何提示將不勝感激。

+0

由於您擁有RAD Studio/C++ Builder,爲什麼不在該IDE中打開項目並讓它爲您管理編譯器標誌,包含和庫? –

+0

@JoshKelley,因爲對獨立第三方的依賴是首先把我的桌子弄得亂七八糟,我寧願儘可能把它保持爲不可知論。另外我並沒有真正發現這個界面讓人喜歡/功能(而且項目上的屬性窗口是不可用的 - 由於某些原因,巨大的字體)。但我(也)試一試。 – vesperto

+0

瞭解,但由於您已經依賴於它們的編譯器和庫,因此使用它們的IDE生成項目文件可能會簡化您的生活。一旦你有一個項目文件,你可以從命令行(使用msbuild)來構建它,並使用你自己的IDE,而不必混淆庫幷包含你自己。 –

回答

1

forums11 years old post一些三分球后,我增加了一些額外的obj的連接線,即cw32mt.libimport32.lib,使最後一行看起來像這樣(因人而異):

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也很方便。