C++项目编译为静态库,失败(链接器错误)作为动态库.为什么?

Roe*_*oey 6 c++ dll visual-studio-2008-sp1 log4cplus

我有一个VS2008本机C++项目,我希望编译为DLL.

它只引用一个外部库(log4cplus.lib),并使用其功能.(当然也使用log4cplus的.h文件).

当我尝试将我的项目编译为静态库时,它会成功.当我尝试DLL时,它失败了:

1>MessageWriter.obj : error LNK2019: unresolved external symbol "public: static class log4cplus::Logger __cdecl log4cplus::Logger::getInstance(class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> > const &)" (?getInstance@Logger@log4cplus@@SA?AV12@ABV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@Z) referenced in function "class log4cplus::Logger __cdecl Log(void)" (?Log@@YA?AVLogger@log4cplus@@XZ)
Run Code Online (Sandbox Code Playgroud)

还有4个与log4cplus.lib中的函数相关的错误.

看起来真的很蠢..请帮帮我:)

谢谢!

编辑:

我链接到log4cplus.lib文件,它发现它很好.另外,log4cplus.lib是100%功能的,我在另一个项目中使用它没有任何问题.我的初衷是将我的项目编译为静态库并在我正在编写的另一个DLL中使用它,但是当这样做时,我在其他项目中得到了相同的链接器错误...

编辑#2:

导致链接器错误的函数是静态函数..这可能是问题的一部分吗?

dap*_*ape 6

wilx是对的.我有相同的链接问题.

我花了将近一天的时间来解决这个问题.

我已经下载了log4cplus-1.0.4,用Visual Studio 2010打开这个项目后,编译它,静态和动态库,没有错误.

但是,当我尝试使用这些库时,无论是静态库还是动态库,都会出现链接错误.

原因是,默认情况下,那些项目使用多字节字符,但是,我自己的项目使用unicode,因此,为了解决这些链接问题,你只需要更改一个项目的字符集.

unicode或两个多字节字符集.

并在visual studio 2010中更改一个项目的字符集,请参阅以下链接.

如何在VC++项目中关闭Unicode?


tro*_*foe 2

您实际上正在链接 log2cplus.lib 文件吗?如果您编译为静态库,那么您将通过最终的 .exe 链接到它,而不是在静态库中 - 也许这就是区别?