Почему мой проект Visual С++.exe создает файлы .lib и .exp?
У меня есть решение, состоящее из 3 проектов. Один из них представляет собой статическую библиотеку, а два - файлы на основе консоли .exe, которые зависят от этой библиотеки и связаны с ней. Их настройки кажутся одинаковыми. Я строю один из них:
1 > ------ Сборка запущена: Проект: masksample, Конфигурация: Отладка Win32 ------
1 > Компиляция...
1 > stdafx.cpp
1 > Компиляция...
1 > masksample.cpp
1 > Компиляция манифеста с ресурсами...
1 > Образцы...
1 > LINK: C:\Users\DarekSz\Praca\cci\Debug\masksample.exe не найден или не создан последней инкрементной ссылкой; полная ссылка
1 > Вложение манифеста...
1 > masksample - 0 error (s), 0 warning (s)
========== Build: 1 удался, 0 не удалось, 1 обновлено, 0 пропущено ==========
Затем я перехожу к созданию другого:
1 > ------ Сборка запущена: Проект: calibsample, Конфигурация: Отладка Win32 ------
1 > Компиляция...
1 > stdafx.cpp
1 > Компиляция...
1 > calibsample.cpp
1 > Компиляция манифеста с ресурсами...
1 > Образцы...
1 > LINK: C:\Users\DarekSz\Praca\cci\Debug\calibsample.exe не найден или не создан последней инкрементной ссылкой; полная ссылка
1 > Создание библиотеки C:\Users\DarekSz\Praca\cci\Debug\calibsample.lib и объект C:\Users\DarekSz\Praca\cci\Debug\calibsample.exp
1 > Вложение манифеста...
1 > calibsample - 0 error (s), 0 предупреждение
========== Build: 1 удался, 0 не удалось, 1 обновлено, 0 пропущено ==========
Почему компоновщик создает файлы .lib и .exp на этот раз? Есть ли возможность включить или отключить это действие, которое я активировал, не зная об этом?
Ответы
Ответ 1
Немного поздно, но, может быть, кто-то еще может найти полезный этот намек.
BTW Я не гуру С++...
В моем решении у меня есть 3 проекта. Один из них - проект dll, остальные два проекта приложений Win32, ссылающиеся на проект dll.
Обычно с созданной dll вы также создаете другие файлы (.exp,.lib) для проектов NON dll. Это может произойти, когда вы включаете файл .h в проект dll в проект приложения, который содержит класс, помеченный __declspec (dllexport).
Чтобы избежать компоновщика, подумайте, что вы пытаетесь включить некоторые .h файлы в "export", используйте условное выражение для определения вашего макроса _declspec.
Пример:
#if defined(_DO_NOT_EXPORT)
#define DllExport
#else
#define DllExport __declspec(dllexport)
#endif
Хорошо, скажем, у вас есть MyClass.h в вашем проекте dll.
в вашем .h файле, который вы могли бы сейчас:
class DllExport MyClass {
...
}
Если вы хотите включить этот .h файл в проект NON dll, вам просто нужно определить условие _DO_NOT_EXPORT
#define _DO_NOT_EXPORT
#include "MyClass.h"
Ответ 2
Это нормально, если одна или несколько функций экспортируются/экспортируются из вашего исполняемого файла.