建立TBB在MinGW32下(在Windows 7 64位),併成功地鏈接一個簡單的程序。不幸的是,我的同事無法成功鏈接。我們都運行相同版本的Windows,相同版本的MinGW(mingw-get-inst-20110802),並試圖編譯完全相同的代碼。我們的PATH環境變量完全相同(。:/ usr/local/bin:/ mingw/bin:/ bin)。然而,儘管所有的事情都是平等的(據我所知),我可以成功地構建和運行該程序,我的同事嘗試在鏈接步驟失敗。如果我給他我的tbb.dll,那麼他可以成功地鏈接他的程序。因此,我被引導認爲他的tbb.dll構建存在一些問題。我們已經證實了(使用文件),我們生產的所有目標文件的32位二進制文件和庫建立/鏈接到TBB在MinGW
$ file a.exe
a.exe: PE32 executable for MS Windows (console) Intel 80386 32-bit
$ file ./tbb/tbb30_20110704oss/lib/tbb.dll
./tbb/tbb30_20110704oss/lib/tbb.dll: PE32 executable for MS Windows (DLL) (console) Intel 80386 32-bit
我們使用建立TBB的命令行是:
mingw32-make compiler=gcc arch=ia32 runtime=mingw tbb
簡單的測試程序我們正在編制是:
#include <tbb/task_scheduler_init.h>
using namespace tbb;
int main() {
task_scheduler_init init;
return 0;
}
我們使用來構建簡單的測試程序
命令行g++ test1.cpp -I ./tbb/tbb30_20110704oss/include -L ./tbb/tbb30_20110704oss/lib -ltbb
在我的情況下,它完美地構建和鏈接。在他的情況下,他得到錯誤信息:似乎
test1.o: In function `tbb::task_scheduler_init::task_scheduler_init(int, unsigned int)':
test1.cpp:(.text._ZN3tbb19task_scheduler_initC1Eij[tbb::task_scheduler_init::task_scheduler_init(int, unsigned int)]+0x33): undefined reference to `tbb::task_scheduler_init::initialize(int, unsigned int)'
test1.o: In function `tbb::task_scheduler_init::~task_scheduler_init()':
test1.cpp:(.text._ZN3tbb19task_scheduler_initD1Ev[tbb::task_scheduler_init::~task_scheduler_init()]+0x16): undefined reference to `tbb::task_scheduler_init::terminate()'
的消息,表明接頭是具有尋找符號TBB :: task_scheduler_init ::初始化()問題,tbb_task_schedule_init ::結束()。然而這兩個符號的tbb.dll存在(下面的納米輸出是兩個相同的他和我):
$ nm ../tbb/tbb30_20110704oss/lib/tbb.dll | grep task_scheduler_init
676c9cb8 T __ZN3tbb19task_scheduler_init10initializeEi
676c9c2c T __ZN3tbb19task_scheduler_init10initializeEij
676c9b64 T __ZN3tbb19task_scheduler_init19default_num_threadsEv
676c9afc T __ZN3tbb19task_scheduler_init9terminateEv
誰能提供任何建議,爲什麼我將能夠建立並把這個簡單的例子,當我的同事無法鏈接時,儘管我們使用的是相同的確切工具,二進制文件,源代碼,操作系統等。
您是否與您的同事機器上構建的DLL具有相同的鏈接問題? – 2012-01-11 15:23:41
是的。如果我鏈接到建立在我的同事機器上的tbb.dll,那麼我會看到與「初始化」和「終止」錯誤相同的未定義參考。如果我建立在我自己的機器上構建的tbb.dll,那麼一切都很好。這導致我相信這個問題與他的tbb.dll的構建方式有關。 – user992113 2012-01-11 21:56:45
比較DLL的內容(使用nm或類似工具)並查找不容易解釋的差異可能是有意義的。也許這會給你一些什麼是錯的線索。 – 2012-01-12 14:00:47