我有一个依赖外籍人士的项目。我的问题是我无法链接到外籍人士。我使用Ubuntu(debian环境),需要使用cmake来构建makefile。
\n\n我\xc2\xb4ve尝试下载源代码并链接到我的CMakeLists.txt中:
\n\ninclude_directories(\n...\n${CMAKE_SOURCE_DIR}/expat-2.1.0/lib\n...\n) \nRun Code Online (Sandbox Code Playgroud)\n\n我尝试移动 .c 文件并单独链接到它们:
\n\nadd_executable(${PROJECT_NAME}\n...\nsrc/xmlrole.c\nsrc/xmltok.c\nsrc/xmltok_impl.c\nsrc/xmltok_ns.c\nsrc/xmlparse.c\n...\n)\nRun Code Online (Sandbox Code Playgroud)\n\n虽然这不起作用\xc2\xb4t 工作并在链接时在 xmlparse.c 中出现错误
\n\n有人知道如何正确链接 CMakeLists.txt 文件中的库吗?是否有必要下载源代码并链接到文件本身(我可以\xc2\xb4t 开始工作)?
\n\n是否需要下载源代码,或者是否可以链接到运行“sudo apt-get install expat”时创建的“.so - 文件”?
\n如何删除具有特定属性的子项?我使用的是c ++/libxml2.到目前为止我的尝试(在示例中我想删除id为"2"的子节点):
Given XML:
<p>
<parent> <--- current context
<child id="1" />
<child id="2" />
<child id="3" />
</parent>
</p>
xmlNodePtr p = (parent node)// Parent node, in my example "current context"
xmlChar* attribute = (xmlChar*)"id";
xmlChar* attribute_value = (xmlChar*)"2";
xmlChar* xml_str;
for(p=p->children; p!=NULL; p=p->next){
xml_str = xmlGetProp(p, attribute);
if(xml_str == attribute_value){
// Remove this node
}
}
xmlFree(xml_str);
Run Code Online (Sandbox Code Playgroud) 我想要做的是将字符串转换为 const char*。
\n\n理想情况下,我可以只使用“const char* myConstChar = myString.c_str()”,但如下面的示例所示;它不适用于二进制数据:
\n\n#include <iostream>\n#include <fstream>\n#include <stdio.h>\n#include <string.h>\n\nusing namespace std;\n\nint main(){\n string myString; // This need to be string\n ifstream infile;\nconst char* myConstChar; // This need to be const char*\n\ninfile.open("binary.bin");\n\nif(infile){\n while(getline(infile, myString)){ \n std::cout << "Data: " << myString << " string length: "; \n std::cout << myString.length() << "\\n";\n myConstChar = myString.c_str();\n std::cout << "const char Data: " << myConstChar; \n std::cout << " const char length: "<< strlen(myConstChar) <<"\\n";\n }\n }\n\n …Run Code Online (Sandbox Code Playgroud)