У меня было такое же требование - только что нашел другое решение:
Предполагая, что A.lib имеет Ah (который используется исходными файлами, используемыми для сборки B.dll, например, предполагая, что Ah содержит прототипы для функцийсодержится в A.lib), просто добавьте в Ah следующее:
#pragma comment(linker, "/export:_foo")
Это даст указание компоновщику экспортировать foo()
при сборке B.dll.Обратите внимание на начальное подчеркивание - оно там, потому что это истинное имя символа для foo()
, содержащегося в A.lib (используйте dumpbin /symbols A.lib | findstr foo
, чтобы увидеть его).В моем примере foo()
использовал соглашение о вызовах __cdecl
, но если вы используете __stdcall()
или компилируете как C ++, вы получите другое оформление имени, поэтому вам придется настроить приведенный выше оператор #pragma
какрезультат.
Неважно, будет ли Ah включен многими исходными файлами в B.dll - компоновщик не будет жаловаться, если одно и то же определение будет сделано несколько раз.
One "Преимущество этого подхода в том, что вам даже не нужно использовать спецификатор __declspec(dllexport)
для foo()
в A.lib ...