| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Один объектный файл для приложения (exe) и библиот |
| Автор: NWhisper 10.1.2007, 11:12 | ||||||
| Всем привет! Встал интересный вопрос, можно ли так сделать на Visual C++? Допустим, есть заголовочный файл: //file1.h
И есть исходник: //file1.cpp
После выполнения cl /MD file1.cpp получается файл file1.obj. Далее, пишем еще один исходник: //file2.cpp
После сборки этого исходника командой cl /LD /MD file2.cpp /link file.obj появляется file2.dll, которая не экспортирует App::foo. Может кто-нибудь сказать почему не экспортируется App::foo? |
| Автор: En_t_end 10.1.2007, 16:38 |
| ИМХО, если правильно понял вопрос. Таблица экспорта создается в обьектном файле в момент его создания, т.е компиляции. Насколько я понял, в file1.obj в таблицы экспорта, если она вообще будет создана, явно не будет твоего метода. Смысл таков, что не указав перед сборкой нужного файла какие функции экспортируются, они и не будут экспортироваться. В дальнейшем после компиляции это не изменить. |
| Автор: Romikgy 10.1.2007, 20:15 |
| а че не написать один раз в хедерном файле? |
| Автор: Earnest 10.1.2007, 20:46 | ||
| Тогда функции всегда будут экспортироваться, а нужно чтобы они при построении DLL экспортировались, а при построении EXE - импортировались. Это стандартная техника, и все должно работать. Только удобнее делать примерно так:
Этот заголовок включается во все заголовочные файлы, которые описывают экспортирумые классы и функции MyDll. Кроме того, в настройках MyDLL прописывается символ препроцессора _MYDLL. И все. Когда заголовок (один и тот же) подключается к MyDLL - функции экспортируются, когда к EXE или другим DLL - импортируются. Всю жизнь так делаю (ну почти |