首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正确使用__declspec(dllimport)

正确使用__declspec(dllimport)
EN

Stack Overflow用户
提问于 2011-12-19 08:00:08
回答 1查看 2.6K关注 0票数 2

我想构建2个dlls,让我们称它们为FooBar。我想让BarFoo导入一些类。

Foo.h:

代码语言:javascript
复制
#ifdef EXPORT
#define DECL __declspec(dllexport)
#else
#define DECL __declspec(dllimport)
#endif

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

Bar.cpp:

代码语言:javascript
复制
#include "bar.h"
void bar(){
        Foo f;
        f.bar();
}

为了构建Foo.dll,我做了

代码语言:javascript
复制
g++ -DEXPORT -c Foo.cpp -o Foo.o
g++ -shared Foo.o -o Foo.dll

这将在Foo.o中生成以下引用:

代码语言:javascript
复制
$ 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时,我会这样做

代码语言:javascript
复制
$ 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'

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

代码语言:javascript
复制
$ 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

EN

回答 1

Stack Overflow用户

发布于 2011-12-19 08:07:30

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8555842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档