如何在c ++项目中使用共享动态库?

时间:2014-06-09 10:49:13

标签: c++ dynamic-linking

我正在运行64位Linux并使用Netbeans 8.0 IDE。我只创建了新的C ++项目,到目前为止只包含一些HelloWorld代码。我想使用第三方库进行日志记录。我选择了log4cpp(因为我有使用Java的经验,它应该有类似的接口)。

我从存储库安装了liblog4cpp,并且可以在/ usr / lib中看到它,以便清楚:

$ locate log4cpp
/usr/lib/liblog4cpp.so
/usr/lib/liblog4cpp.so.5
/usr/lib/liblog4cpp.so.5.0.5
/usr/lib/x86_64-linux-gnu/liblog4cpp.so
/usr/lib/x86_64-linux-gnu/liblog4cpp.so.5
/usr/share/doc/liblog4cpp5
/usr/share/doc/liblog4cpp5/AUTHORS
/usr/share/doc/liblog4cpp5/NEWS.gz
/usr/share/doc/liblog4cpp5/README
/usr/share/doc/liblog4cpp5/THANKS
/usr/share/doc/liblog4cpp5/TODO
/usr/share/doc/liblog4cpp5/changelog.Debian.gz
/usr/share/doc/liblog4cpp5/changelog.gz
/usr/share/doc/liblog4cpp5/copyright
/var/cache/apt/archives/liblog4cpp5_1.0-4_amd64.deb
/var/lib/dpkg/info/liblog4cpp5.list
/var/lib/dpkg/info/liblog4cpp5.md5sums
/var/lib/dpkg/info/liblog4cpp5.postinst
/var/lib/dpkg/info/liblog4cpp5.postrm
/var/lib/dpkg/info/liblog4cpp5.shlibs

我在如何#include它在我的应用程序中遇到大麻烦。灵感来自我在源代码中提供的文档中的示例:

#include "log4cpp/Category.hh"
#include "log4cpp/Appender.hh"
#include "log4cpp/FileAppender.hh"
#include "log4cpp/OstreamAppender.hh"
#include "log4cpp/Layout.hh"
#include "log4cpp/BasicLayout.hh"
#include "log4cpp/Priority.hh"

我第一次使用netbeans生成的Makefile,但无法弄清楚如何配置项目以使其工作。我的所有试验都会导致以下错误(第16行是第一个#include):

$ make
src/main.cpp:16:31: fatal error: log4cpp/Category.hh: No such file or directory
compilation terminated.
make: *** [build/NetworkConfiguration.o] Error 1

我还尝试了一个自定义Makefile,给出了g ++参数-llog4cpp,但我总是得到同样的错误。我可以提供更多信息/代码,如果它会有所帮助。该解决方案不需要依赖于IDE,我觉得我只是误解了链接是如何工作的,所以请随时告诉我如何通过自定义Makefile从控制台实现我想要的东西。

1 个答案:

答案 0 :(得分:0)

由于杯子还没有发布答案,我将他的评论解释为可接受的答案。

安装liblog4cpp-dev。区别在于liblog4cpp只包含库,而liblog4cpp-dev是包含头文件的开发工具包。