如何在 Linux 上的 C++ 程序中使用共享库(在本例中为 JsonCpp)?
Posted
技术标签:
【中文标题】如何在 Linux 上的 C++ 程序中使用共享库(在本例中为 JsonCpp)?【英文标题】:How do I use a shared library (in this case JsonCpp) in my C++ program on Linux? 【发布时间】:2010-04-26 19:19:47 【问题描述】:我是一个新的 C++ 程序员,我正在使用 C++ 自己编写我的第一个程序。我决定使用 JSON 来存储我将要使用的一些数据,并且我找到了一个库来处理 JSON,JsonCpp。
我已经使用我的 Linux 系统的包管理器安装了该库,并且在我的 C++ 代码中,我已经在我的源代码文件中使用了该库
#include <json>
并使用 g++ 编译它,它是 -ljson 和 -L/usr/lib 选项(libjson.so 位于 /usr/lib
)。
但是,第一次使用库提供的对象Json::Value,会出现“Json has not declared”的编译错误。我确定我的错误很简单,所以有人可以解释我做错了什么吗?我的书都没有提到如何使用共享库,所以我不得不在谷歌上找到这么多。
编辑:带有 -E 选项的 g++ 给出了这个错误:
json: 没有这样的文件或目录。
【问题讨论】:
【参考方案1】:我查看了JsonCPP的文件列表:
include/json/autolink.h [code]
include/json/config.h [code]
include/json/features.h [code]
include/json/forwards.h [code]
include/json/json.h [code]
include/json/reader.h [code]
include/json/value.h [code]
include/json/writer.h [code]
如果标头安装在/usr/include
中,请尝试#include <json/json.h>
。如果它们安装在其他地方,请使用 -I
提及此路径
g++ -I/my/lib/include -L/my/lib/lib -lmylib mysource.cpp
【讨论】:
【参考方案2】:您是否还通过-I
告诉 g++ 在哪里可以找到头文件 - 这是我对问题的猜测。
【讨论】:
【参考方案3】:该错误几乎可以肯定意味着您在收到错误的实际源文件中没有#include
。
使用
g++ -E [whatever other options]
查看 cpp 输出是检查和查看您实际包含的内容的一种方法。
如果您实际粘贴错误消息可能会有所帮助;您的评论表明#include 有错误,但您的问题暗示了其他内容。
【讨论】:
g++ -E 给出 json: No such file or directory 您是否使用了与 -E 相同的选项来获取错误?特别是 -I 选项?以上是关于如何在 Linux 上的 C++ 程序中使用共享库(在本例中为 JsonCpp)?的主要内容,如果未能解决你的问题,请参考以下文章
如果我在 Linux 上更改 C++ 动态共享库而我的可执行程序在它上面使用会发生啥