Когда вы пытаетесь собрать gpuocelot, вы сталкиваетесь с ошибками форсированной ссылки на OS X Lion - PullRequest
4 голосов
/ 24 февраля 2012

Когда я пытаюсь собрать libocelot.dylib в OS X, я сталкиваюсь с ошибками компоновщика против boost. Похоже, что это на последнем шаге сценария сборки, когда он запускает команду:

g++ -o .release_build/libocelot.dylib -lstdc++ -dynamiclib [...many *.os files referenced here ...] -L/usr/lib -L.release_build -L. -lboost_system-mt -lboost_filesystem-mt -lboost_thread-mt -lGLEW -ldl

Это дает несколько неопределенных ошибок символов, которые выглядят так:

Undefined symbols for architecture x86_64:
  "std::__detail::_List_node_base::_M_hook(std::__detail::_List_node_base*)", referenced from:
  "std::__detail::_List_node_base::swap(std::__detail::_List_node_base&, std::__detail::_List_node_base&)", referenced from:
  "std::__detail::_List_node_base::_M_unhook()", referenced from:
  "std::__detail::_List_node_base::_M_transfer(std::__detail::_List_node_base*, std::__detail::_List_node_base*)", referenced from:
  "std::__detail::__prime_list", referenced from:
  "std::_Hash_bytes(void const*, unsigned long, unsigned long)", referenced from:
  "std::ctype<char>::_M_widen_init() const", referenced from:
  "_glGetError", referenced from:

Из них большинство, но не все, похоже, из буст-библиотек. Когда я использую nm для проверки, чтобы увеличить файлы dylib, я нахожу, что эти символы отмечены U для неопределенного:

lib$ nm *.dylib | grep _M_hook
                   U __ZNSt8__detail15_List_node_base7_M_hookEPS0_
                   U __ZNSt8__detail15_List_node_base7_M_hookEPS0_
                   U __ZNSt8__detail15_List_node_base7_M_hookEPS0_
                   U __ZNSt8__detail15_List_node_base7_M_hookEPS0_
                   U __ZNSt8__detail15_List_node_base7_M_hookEPS0_
                   U __ZNSt8__detail15_List_node_base7_M_hookEPS0_


lib$ nm *.dylib | grep _M_unhook
                    U __ZNSt8__detail15_List_node_base9_M_unhookEv
                    U __ZNSt8__detail15_List_node_base9_M_unhookEv
                    U __ZNSt8__detail15_List_node_base9_M_unhookEv
                    U __ZNSt8__detail15_List_node_base9_M_unhookEv

И так далее. Так что по какой-то причине символы, которые ищет Оцелот, не встроены в буст. Любые идеи о том, что я могу делать не так, или альтернативный подход? Для повышения мощности я следовал инструкциям, приведенным ниже.

http://www.boost.org/doc/libs/1_48_0/more/getting_started/unix-variants.html

...