Есть у меня набор ПО в виде драйвера и статической библиотеки, содержащая в себе набор функций для работы с драйвером.
Раньше её добавляли в проекты VS и всё было хорошо. Теперь решили добавлять к C++ BUILDER 6.
Т.к. библиотека сделана в VS, то её пришлось конвертироваться с помощью утилиты coff2omf под билдер.
Создаю в билдере консольное окно, выбираю Си++, снимаю use VCL и Multi threaded.
Инклуды выглядят так:
тело — обычный хелло ворд:
int main(int argc, char* argv[]){
cout<<"Hello world!";
cin.get(); cin.get();
return 0;
}
Консоль запускается и пишет хелло ворд.
но стоит в главную функцию добавить создание объекта моего класса:
CMyClass obj;
как вылетают ошибки:
[Linker Error] Unresolved external 'CMyClass::~CMyClass()' referenced from D:\...\UNIT1.OBJ
[Linker Error] Unresolved external 'CMyClass::CMyClass()' referenced from D:\...\UNIT1.OBJ
пробовал
#pragma comment(lib, "MyLib.lib")
заменить на добавление библиотеки в проект через Project->Add to project
ничего не поменялось.
Я так понимаю что прога видит объявление конструктора и деструктора в MyClass.h, а их тела в MyLib.lib нет.
подскажите пожалуйста, что я не так делаю, или что ещё доделать надо?
Здравствуйте, smithana, Вы писали:
S>Я так понимаю что прога видит объявление конструктора и деструктора в MyClass.h, а их тела в MyLib.lib нет. S>подскажите пожалуйста, что я не так делаю, или что ещё доделать надо?
Перекомпилируйте свою либу в билдере, чтоб была как родная.
Может получится решить проблему явным использованием конвенций, типа __stdcall. Попробуйте также поиграться с extern "C"
Здравствуйте, pva, Вы писали:
pva>Перекомпилируйте свою либу в билдере, чтоб была как родная.
ну вот это завтра попробую, а
pva>Может получится решить проблему явным использованием конвенций, типа __stdcall. Попробуйте также поиграться с extern "C"
играться желания никакого нет. В будущем ещё и к QT подключать надо будет, так что думаю вообще весь функционал библиотеки в драйвер запихать.
Понял в чём разница.
в lib файле студии хранятся тела функций, а в lib файле билдера, только их заголовки(судя по тому что показывает просмотр по f3 в коммандере).
Это объясняет так сильно уменьшившийся размер библиотеки. (VS 300 кб, билдер 1 кб.)
Попробовал билдеру ещё подсунуть MyClass.obj студии, получил ошибку Error processing module.
Отсюда два вопроса:
есть ли у утилиты com2omf какие-либо ключи для конвертирования?
и можно-ли как-то сконвертировать студийный *.obj файл в билдерный формат?
Спасибо.