none
log4cplus-1.1.0-beta1的问题 RRS feed

  • 问题

  • 我下载了源码文件,并且在msvc8里编译了log4cplus_dll工程,看到默认的是unicode但我不需要这个,我就选择了未设置。log4cplus_static一样的编译。然后像调用其他dll一样,总是失败,现在显示一条错误如下。

    error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall log4cplus::helpers::SharedObjectPtr<class log4cplus::Appender>::~SharedObjectPtr<class log4cplus::Appender>(void)" (__imp_??1?$SharedObjectPtr@VAppender@log4cplus@@@helpers@log4cplus@@QAE@XZ),该符号在函数 _main 中被引用。

    我用vc自带的工具查看了dll里面的函数名,发现名字前面有?。很崩溃,请高人指教一二。第一次玩这个,找了一上午资料,没找到问题

    2011年10月27日 6:19

答案

  • 查看编译设置,确保你用同样的配置编译了两个工程。

    比如如果你的log4cplus用的是Unicode,那你的工程也得用Unicode。更多的编译设置可以打开vcproj文件来看。



    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP
    • 已标记为答案 Rob Pan 2011年11月4日 8:50
    2011年10月27日 18:41
    版主

全部回复

  • 本人用的环境是vs2008.本人知道编译dll要么是c的方式,要么是def才能保证函数名不变化,但是这个源码是别人的,而且网上人的留言应该也是这么弄的。请问一下到底是我那个地方设置不对吗。我都设置成unicode编码,运行库为:多线程调试(/MTd)。始终不行,报了个新的错误,截取其中一条如下

     error LNK2019: 无法解析的外部符号 "public: unsigned int __thiscall log4cplus::thread::Queue::get_event(class log4cplus::spi::InternalLoggingEvent &)" (?get_event@Queue@thread@log4cplus@@QAEIAAVInternalLoggingEvent@spi@3@@Z),该符号在函数 "public: virtual void __thiscall log4cplus::`anonymous namespace'::QueueThread::run(void)" (?run@QueueThread@?A0xd0563f89@log4cplus@@UAEXXZ) 中被引用

    哪位用过的仁兄帮帮忙解答一下。很是崩溃的问题

    2011年10月27日 16:15
  • 查看编译设置,确保你用同样的配置编译了两个工程。

    比如如果你的log4cplus用的是Unicode,那你的工程也得用Unicode。更多的编译设置可以打开vcproj文件来看。



    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP
    • 已标记为答案 Rob Pan 2011年11月4日 8:50
    2011年10月27日 18:41
    版主
  • 经过努力已经把问题解决了,但是有个问题也产生了。用工具打开dll,发现里面的函数名字都是带了问号的,此时响应的lib也是编译他们的。如果是自己在封装dll的时候,如果函数名不一样,这个dll肯定没办法调用的,但是这个dll 却能调用,很不理解。谁能告诉我一下为什么呢
    2011年10月31日 0:49