在构建共享对象时,我忘记将第 3 方“仅标头”库标头 (.h) 文件放入正确的路径中。它建造得很好——回顾起来令人惊讶。
在我的共享对象中使用该第 3 方库时,在运行时恰好发生了段错误。
我不明白的部分是当我将这些头文件复制到用 指定的路径时#include
,我无法导致段错误。我什至没有重新构建对象。非常奇怪的是,当我 mv 头文件所在的目录时,它仍然有效 - 没有段错误。但是,当我完全 rm 目录时,它崩溃了。它是否查找当前目录和子目录的头文件?我在标准中也有那个只有标题的库(?)/usr/local/include
我以前没有使用过共享对象。我通常创建静态对象并将它们包含在构建中。我用来创建有问题的共享对象的标志是-shared -fPIC
我想了解这种行为。由于部署,这很有趣。在生产机器上部署时是否需要包含这些头文件?本质上,我不想将其作为依赖项,因为它是“仅标头”库。
编辑
代码:
#include <rapidjson/document.h>
#include <rapidjson/writer.h>
#include <rapidjson/stringbuffer.h>
void MyClass::myFunction()
{
rapidjson::StringBuffer string;
rapidjson::Writer<rapidjson::StringBuffer> jsonWriter(string);
}
这是调试会话的链接:http: //pastebin.com/a0FaQwf1