Я создаю TBB под MinGW32 (в Windows 7 64 bit) и успешно связываю с ним простую программу.К сожалению, мой коллега не может сделать ссылку успешно.Мы оба используем одну и ту же версию Windows, ту же версию MinGW (mingw-get-inst-20110802) и пытаемся скомпилировать точно такой же код.Наша переменная окружения PATH точно такая же (.: / Usr / local / bin: / mingw / bin: / bin).Тем не менее, несмотря на то, что все вещи равны (насколько я могу судить), я могу успешно собрать и запустить программу, мои попытки коллег не увенчались успехом на этапе соединения.Если я дам ему мой tbb.dll, он сможет успешно связать свою программу.Таким образом, я склонен полагать, что что-то не так с его сборкой tbb.dll.Мы подтвердили (используя файл), что мы производим 32-битные двоичные файлы для всех объектных файлов и библиотек
$ 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 :: initialize () и tbb_task_schedule_init :: terminate (),Однако оба эти символа существуют в 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
Может кто-нибудь предложить какое-либо предложение относительно того, почему я смог бы построить и связать этопростой пример, когда мой коллега не может связать, несмотря на то, что мы используем одни и те же точные инструменты, двоичные файлы, исходный код, операционную систему и т. д. ??