gpt4 book ai didi

c++ - 正确使用 __declspec(dllimport)

转载 作者:搜寻专家 更新时间:2023-10-31 01:55:20 25 4
gpt4 key购买 nike

我想构建 2 个 dll,我们称它们为 FooBar。我希望 BarFoo 导入一些类。

Foo.h:

#ifdef EXPORT
#define DECL __declspec(dllexport)
#else
#define DECL __declspec(dllimport)
#endif

class DECL Foo {
public:
Foo();
void bar();
};

酒吧.cpp:

#include "bar.h"
void bar(){
Foo f;
f.bar();
}

为了构建 Foo.dll,我这样做

g++ -DEXPORT -c Foo.cpp -o Foo.o
g++ -shared Foo.o -o Foo.dll

这会在 Foo.o 中产生以下引用:

$ nm Foo.o
00000000 b .bss
00000000 d .data
00000000 i .drectve
00000000 t .text
0000000c T __ZN3Foo3barEv
00000006 T __ZN3FooC1Ev
00000000 T __ZN3FooC2Ev

现在,当我想构建 Bar.dll 时,我会这样做

$ g++ -shared Bar.cpp -o Bar.dll
/tmp/ccr8F57C.o:Bar.cpp:(.text+0xd): undefined reference to `__imp___ZN3FooC1Ev'
/tmp/ccr8F57C.o:Bar.cpp:(.text+0x1a): undefined reference to `__imp___ZN3Foo3barEv'

如果我尝试在未定义 EXPORT 的情况下构建 Foo.cpp(以便宏 DECL 计算为 __declspec(dllimport),我将得到以下信息:

$ g++ -c Foo.cpp
Foo.cpp:3: warning: function 'Foo::Foo()' is defined after prior declaration as dllimport: attribute ignored
Foo.cpp: In constructor `Foo::Foo()':
Foo.cpp:3: warning: function 'Foo::Foo()' is defined after prior declaration as dllimport: attribute ignored
Foo.cpp: In member function `void Foo::bar()':
Foo.cpp:7: warning: function 'void Foo::bar()' is defined after prior declaration as dllimport: attribute ignored

这确实有意义,因为声明为 dllimport 的函数随后无法定义。

我应该如何在 Bar 中引用 Foo

最佳答案

当您构建 Bar.dll 时,您还需要使用 -l 选项链接到 Foo.lib

关于c++ - 正确使用 __declspec(dllimport),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8555842/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com