|
我想问一下大家,在OSG源代码中,函数库(DLL)中地导出是导入应该是通过OSG_EXPORT宏来完成的吧,而OSG 中的类与API函数都是放在不同的名字空间中的,如osg,osgdb等等,为什么我自己写的程序中的函数却不能导出名字空间中的类与函数呢?下面是我写的一个示例代码:
//testdll.h
#ifndef TESTDLL_H
#define TESTDLL_H
#ifdef TESTDLL_EXPORTS
#define TESTDLL_API __declspec(dllexport)
#else
#define TESTDLL_API __declspec(dllimport)
#endif
namespace TestDll
{
TESTDLL_API int add(int,int);
TESTDLL_API int sub(int,int);
};
#endif
//testdll.cpp
#include "testdll.h"
int add(int x,int y)
{
return x + y;
}
int sub(int x,int y)
{
return x - y;
}
//test.cpp
#include "testdll.h"
int main(int argc,char *argv[])
{
printf("20+30= %d\n",add(20,30));
printf("50-10= %d\n",sub(50,10));
return 0;
}
//makefile
all: testdll.dll test.exe
testdll.dll:testdll.obj
link -dll -out:testdll.dll testdll.obj
testdll.obj:testdll.cpp
cl /c /D TESTDLL_EXPORTS testdll.cpp
test.exe:test.obj
link -out:test.exe test.obj testdll.lib
test.obj:test.cpp
cl /c test.cpp
.PHONY : clean
clean:
del testdll.obj testdll.lib testdll.exp testdll.dll test.obj test.exe
但执行nmake的时候,当执行到link -dll -out:testdll.dll testdll.obj 时却没有生成lib文件与exp文件,从而导致 link -out:test.exe test.obj testlib.lib执行失败!这是为什么呀? |
|