Почему мой проект 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

Это нормально, если одна или несколько функций экспортируются/экспортируются из вашего исполняемого файла.