我正在尝试在遗留C++项目中构建一个库.平台是使用gcc编译器的power-pc.
编译器给出类似于此的构建错误:error:string:没有这样的文件或目录或错误:vector:没有这样的文件或目录.
我的理解是它无法找到标准库.标准库文件通常驻留在哪里,格式是什么?是*.h还是其他?我在网上搜索过这个,但我不认为我完全理解它.
令人困惑的部分是使用相同源代码文件的同一项目中的另一个库完美地构建.这对我来说可能是这两个项目的makefile是不同的,其中一个是能够找到std lib,另一个则不是.但是快速比较两者并没有带来任何明显的差异.还有其他想法吗?
最后,我刚刚了解到string.h用于c风格的字符串,string用于C++ std lib.可以混合使用它们,即源文件有#include string.h,还有#include字符串通过包含其他文件来隐式吗?我问,因为这是在没有构建的文件中的相同情况.
谢谢.
错误信息:
编译SOURCE_FILE.cpp
在SOURCE_FILE.cpp:3中包含的文件中:
HDR_FILE.h:1:错误:字符串:没有这样的文件或目录
HDR_FILE.h:2:错误:vector:没有这样的文件或目录
COUR IN SOURCE_FILE.cpp
#include <stdlib.h>
#include <string.h>
#include "fileABC.h"
using namespace std;
// Other code
Run Code Online (Sandbox Code Playgroud)
HRD_FILE.h中的代码
#include <string>
#include <vector>
#include <hdr.h>
#include <hdr-cseq.h>
//... OTHER FILES ETC.
Run Code Online (Sandbox Code Playgroud)
如果文件未被检测为C++源代码,那么您可能会收到这样的错误.是否使用适当的文件扩展名命名了c ++文件?
cat test.c
#include <vector>
int main() {}
Run Code Online (Sandbox Code Playgroud)
gcc test.c
test.c:1:18: error: vector: No such file or directory
Run Code Online (Sandbox Code Playgroud)
上面的命令将编译C代码,但不编译C++.请记住,这是两种不同的语言.要构建C++程序,您必须告诉编译器源是C++这样或那样的.如果使用g ++,它会自动假设".c"扩展名的文件是C++(至少我的版本是这样.或者你可以告诉编译器-x c++在传递文件之前通过传递使用C++ .你还必须告诉链接器包括C++库.g ++也会自动执行此操作,或者您可以传递链接器标志-lstdc++.
困难的方式:
gcc -x c++ test.c -lstdc++
简单的方法:
g++ test.c
在回答你的上一个问题时,你可以自由地混合<string.h>和<string>(虽然你应该使用<cstring>而不是<string.h>).