Ошибки компоновщика VC ++ в std :: exception :: _ Raise и std :: exception :: exception - PullRequest
0 голосов
/ 30 октября 2008

Я использую Visual C ++ 2005 Express Edition и получаю следующие ошибки компоновщика:

19>mylib1.lib(mylibsource1.obj) : error LNK2019: unresolved external symbol "__declspec(dllimport) public: void __thiscall std::exception::_Raise(void)const " (__imp_?_Raise@exception@std@@QBEXXZ) referenced in function "protected: static void __cdecl std::vector<class mytype,class std::allocator<class mytype> >::_Xlen(void)" (?_Xlen@?$vector@Vmytype@@V?$allocator@Vmytype@@@std@@@std@@KAXXZ)
19>mylib2.lib(mylibsource2.obj) : error LNK2001: unresolved external symbol "__declspec(dllimport) public: void __thiscall std::exception::_Raise(void)const " (__imp_?_Raise@exception@std@@QBEXXZ)
19>mylib1.lib(mylibsource1.obj) : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall std::exception::exception(char const *,int)" (__imp_??0exception@std@@QAE@PBDH@Z) referenced in function "public: __thiscall std::logic_error::logic_error(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (??0logic_error@std@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@1@@Z)
19>mylib2.lib(mylibsource2.obj) : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall std::exception::exception(char const *,int)" (__imp_??0exception@std@@QAE@PBDH@Z)

Я отключил исключения в сгенерированном коде и использую перед тем, как включить файл заголовка вектора:

#define _HAS_EXCEPTIONS 0

Несколько результатов Google показали кое-что, но не "ага!" решения, которые работали для меня.

EDIT:

Как отмечалось, "_HAS_EXCEPTIONS 0" не отключает исключения как таковые. По крайней мере, в файле заголовка вектора он вызывает _Raise для объекта исключения вместо вызова C ++ «throw». В моем случае он не может ссылаться на функцию _Raise объекта исключения, поскольку я не включил правильную библиотеку. Однако что это за библиотека, не очевидно.

Ответы [ 2 ]

1 голос
/ 31 октября 2008

Добавление этой строки:

#define _STATIC_CPPLIB

перед включением векторного заголовка, кажется, делает свое дело.

0 голосов
/ 30 октября 2008

Третья ошибка проясняет, что #define the _HAS_EXCEPTIONS 0 не влияет. Теперь может включать (имеет смысл, совместное использование кода может уменьшить размер вашего исполняемого файла). Это объяснило бы, почему у вас все еще есть ошибки, если вы определите это до вашего включения Такого рода определения должны быть сделаны в настройках вашего проекта.

Обратите внимание, что _HAS_EXCEPTIONS - это неподдерживаемая функция в Visual Studio. Это не отключает исключения как таковые.

...