Tag: include path

使用GCC的其他目录中的静态库和标头

我在这里看看如何使用GCC做静态库,并且解释非常明确(鄙视我必须重写阶乘函数):我有一个函数(fact.c),函数的头部(fact.h) )和main函数(main.c),所有这些都在我的主目录中。 fact.h int fact (int); fact.c int fact (int f) { if ( f == 0 ) return 1; else return (f * fact ( f – 1 )); } main.c中 #include #include “fact.h” int main(int argc, char *argv[]) { printf(“%d\n”, fact(3)); return 0; } 所以我先生成了目标文件(阶段1)…… $ gcc -c fact.c -o fact.o …然后生成静态库(阶段2)…… $ […]

c_include_path vs ld_library_path

在Ubunutu 12.04或Springdale 6.4上,使用gcc和g ++, C_INCLUDE_PATH (或CPLUS_INCLUDE_PATH )和LD_LIBRARY_PATH之间的区别是什么? LD只在运行时使用,而其他两个只在编译时使用吗? 由于这些操作系统上的GCC似乎忽略了INCLUDE和LIBRARY_PATH环境变量,我应该在构建我的〜/ .bashrc文件时将其设置为使其在现代Linux操作系统中尽可能可移植(实际路径中的模数更改)?

如何防止引用的include搜索当前源文件的目录?

gcc提供-I-选项,在-I-之前的-I目录中搜索引用的包含( #include “foo.h” ),并在-I-之后的-I目录中搜索括号内的包含( #include ),以及其他引用后的内容。 -I-有另一个非常重要的影响。 它从默认搜索路径中删除#include所在的源文件的目录。 通常,带引号的include总是搜索源文件的目录,并在任何-I或其他目录之前搜索它。 -I-因此允许您按照所需顺序指定引用包含文件的确切位置,方法是删除原则上优先使用的默认路径。 所以听起来我回答了我的问题,是吗? 不。当我使用-I- ,我得到了这个讨厌的图: cc1: note: obsolete option -I- used, please use -iquote instead 问题是-iquote不会从搜索路径中删除当前目录。 无论我向-iquote提供什么,它仍然总是先搜索。 所以问题是:如何在不使用-I-情况下获得与-I-相同的效果,这已被弃用并最终消失? 阐述: 假设文件的布局如下: srcdir/ configure file1.c file2.c config.h builddir/ Makefile file1.o file2.o config.h libpudding.a 由于各种原因,我们无法从srcdir删除config.h (它将影响其他平台上的构建过程)。 但是,我们希望将zconf.h中的config.h优先zconf.h在srcdir的zconf.h中。 这可以通过GCC的-I-标志来完成,但似乎不可能。 更新的问题: 好吧,似乎GNU CC开发人员弃用了-I- ,但没有提供实现其function的替代方法。 所以我更新的问题是:什么是引起开发人员注意的最有效的方法,以便很有可能-I-是不完美的(我觉得最优选,因为它是一种非常优雅的方式处理指定搜索,更加如此,并且比-iquotexxx更难看,或者提供某种方式从引用的包含搜索路径中删除当前目录?

链接Visual Studio中的第三方库

您好我是C编程的新手,我之前没有使用过visual studio或第三方库。 我正在尝试用FMOD做一些简单的事情,需要链接fmodvclib,fmod.h,当然还有fmod.dll 我把“fmodex_vc.lib”放在附加的依赖项和include和库目录中的低级库的路径以及其他包含库,但是当我构建它时,它给了我: “无法打开源文件”fmod.h“标识符”FSOUND_SAMPLE“未定义无法打开包含文件:’fmod.h’:没有这样的文件或目录 但即使是奇怪的是:无法打开源文件“stdio.h” #include “fmod.h” #include FSOUND_SAMPLE* handle; int main(void) { int input; FSOUND_Init(44100, 32, 0); handle = FSOUND_Sample_Load(0, “test.ogg”, 0, 0, 0); FSOUND_PlaySound(0, handle); while (input != 0) { scanf_s(“&d”, &input); } FSOUND_Sample_Free(handle); FSOUND_Close(); } 任何帮助,将不胜感激!

为什么项目使用-I include开关给出危险?

在GCC中读取-I开关的精细打印,我很震惊地发现在命令行上使用它会覆盖系统包含。 来自预处理器的文档 “您可以使用-I覆盖系统头文件,替换您自己的版本,因为在标准系统头文件目录之前搜索这些目录。” 他们似乎并不撒谎。 在两个不同的endian.h系统上使用GCC 7,如果我创建一个文件endian.h : #error “This endian.h shouldn’t be included” …然后在同一目录中创建一个main.cpp (或main.c,相同的区别): #include int main() {} 然后使用g++ main.cpp -I. -o main编译g++ main.cpp -I. -o main g++ main.cpp -I. -o main (或clang,相同的区别)给了我: In file included from /usr/include/x86_64-linux-gnu/sys/types.h:194:0, from /usr/include/stdlib.h:394, from /usr/include/c++/7/cstdlib:75, from /usr/include/c++/7/stdlib.h:36, from main.cpp:1: ./endian.h:1:2: error: #error “This endian.h shouldn’t be included” […]