工作有這個庫被用作其他項目的參考:https://github.com/RetroAchievements/RASuite/tree/master/RA_IntegrationC++庫的編譯,但不會像以前的版本
我已經下載了編譯的程序(即附帶編譯庫),他們做工精細。我的目標是對庫代碼進行更改,重新編譯它,並用我自己編譯的DLL替換已下載的已編譯程序的DLL。像這樣:
ProgramA.exe
|_ RA_Integration.dll < replace with my own (built)
甚至在更改代碼之前,我只是試圖編譯DLL,並沿着我下載的已編譯程序使用它。我不願意重新編譯程序本身,因爲它會因爲依賴關係等而過多工作。而且我也希望能夠將DLL「運送」給任何想要修復的人。
因此,我已經下載了該庫的源代碼,自己成功重新編譯它,但是當我使用它而不是程序自帶的代碼時,它們不會啓動(Windows事件查看器說有一個加載我的DLL時出現問題)。
我假設我的系統與構建原始DLL的系統有差異,並且這是它失敗的原因。我的問題是:我能找到這些差異嗎?雖然我是一名專業的.NET程序員(因爲它是我的工作),但我是一名C++新手,並且我無法理解所有那些似乎將不同的構建/結果從一臺機器轉移到另一臺機器的鏈接器/預編譯器/依賴項/ C++的東西。
所有我已經能夠找到的是在項目屬性中的「平臺工具集」是「Visual Studio 2013 - Windows XP(v120_xp)」,因此我已經安裝了Visual Studio 2013(更新5,因爲它似乎Windows基礎VS2013中沒有XP支持),但這似乎還不夠。我運行的是Windows 10,它確實不是幾年前編譯DLL時使用的原始程序員的操作系統,但不確定是否重要?
是否有任何可以從DLL本身或從項目中發現,可以暗示我在我的系統上需要什麼?
希望是有道理的。
感謝
謝謝,但我不明白;我沒有對代碼做任何改變,所以ABI是如何改變的?也許我對ABI是什麼有一個錯誤的定義;但我認爲它只會改變,如果你改變了數據結構或函數定義等。只要沒有這樣的代碼改變(在我的情況下根本沒有代碼改變)不應該保持不變嗎? – Nicolas
@Nicolas編譯器的變化,預處理器的變化定義...你需要100%確定你的構建等同於原始的DLL構建(其中,特別是在windows上,是地獄)。 –
有什麼/我可以使用任何工具來確保這些要求?項目中的任何東西?任何方式來「改造工程師」的DLL,並找出我需要在我的最終? – Nicolas