【问题标题】:gcc compilation without using system defined header locations不使用系统定义的头文件位置的 gcc 编译
【发布时间】:2010-04-12 20:55:00
【问题描述】:

我正在尝试使用 gcc 编译一个 c++ 类。由于构建的性质,我需要从非标准位置调用 gcc 并包含非系统定义的标头,只是为了从不同的位置添加一个集合。但是,当我这样做时,我遇到了一个问题,我找不到一些基本符号(惊喜)。所以我基本上是在运行这个命令来编译我的代码:

-->(PARENT_DIR)/usr/bin/gcc # invoke compiler
-B$(PARENT_DIR)/usr/lib64/gcc/suselinux-x8664 
-B$(PARENT_DIR)/usr/lib64 
 #C/C++ flags
-fPIC -fvisibility=default -g -c -Wall -m64 -nostdinc
 # source files
-I$(SRC_DIR_ONE)/ 
-I$(SRC_DIR_TWO)
-I../include 
 # 'Mock' include the system header files
-I$(PARENT_DIR)/usr/include/c++/$(GCC_VERSION) 
-I$(PARENT_DIR)/usr/include/c++/$(GCC_VERSION)/backward 
-I$(PARENT_DIR)/usr/include/c++/$(GCC_VERSION)/x86_64-suse-linux 
-I$(PARENT_DIR)/usr/lib64/x86_64-suse-linux/$(GCC_VERSION)/include 
-I$(PARENT_DIR)/usr/lib64/gcc/x86_64-suse-linux/$(GCC_VERSION)/include 
-I$(PARENT_DIR)/usr/lib64/gcc/x86_64-suse-linux/$(GCC_VERSION)/include-fixed 
-I$(PARENT_DIR)/usr/src/linux/include 
-I$(PARENT_DIR)/usr/x86_64-suse-linux/include 
-I$(PARENT_DIR)/usr/include/suselinux-x8664 
-I$(PARENT_DIR)/usr/suselinux-x8664/include 
-I$(PARENT_DIR)/usr/include 
-I$(PARENT_DIR)/usr/include/linux 
file.cpp

我收到几个错误,表明未包含基本标头:例如:

$(PARENT_DIR)/usr/include/c++/$(GCC_VERSION)/cstddef ::prtdiff_t 尚未声明 $(PARENT_DIR)/usr/include/c++/$(GCC_VERSION)/cstddef ::size_t 尚未声明。

当我包含头文件目录时,我做错了什么吗?还是我找错地方了?

【问题讨论】:

  • 您的包含树中是否有任何符号链接?
  • @D.Shawley 唯一存在的符号链接是 gcc 安装的那些。 $(PARENT_DIR) 本质上是 gcc 安装的根目录。

标签: c++ c gcc


【解决方案1】:

也许--sysroot 参数会有所帮助,请参阅gcc docs

【讨论】:

  • 嗯,我试过这个,但我仍然得到同样的错误。虽然,我必须说这是来自 gcc 的一个很好的标志。感谢您的提醒。
  • 仅供参考,我使用它是因为我重新定位了一个交叉编译器。在我的构建脚本中,除了--sysroot=...,我还添加了-I$(sysroot)/usr/include/c++-I$(sysroot)/usr/include/c++/$(target),其中target 是目标的arch-dist-os 元组。如果这对您有意义,也许会有所帮助:)
  • 当然,我们在 C++ 代码中使用了 g++。我不确定您为什么会在使用标准 C 代码时遇到这个问题。
猜你喜欢
  • 2012-12-26
  • 2010-09-08
  • 2015-01-19
  • 1970-01-01
  • 1970-01-01
  • 2015-04-20
  • 2012-09-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多