【问题标题】:Where is located a file keeping gcc, and make configuration on Linux Mint, path to include headers?保存 gcc 的文件在哪里,并在 Linux Mint 上进行配置,包含头文件的路径?
【发布时间】:2021-07-22 13:48:48
【问题描述】:

突然,“make”停止工作:没有生成 *.so php 扩展名;

gcc 已停止工作:没有找到头文件;

Visual Studio 代码开始出现问题:缺少标题。

我已重新安装:glibc、libc6-dev、build-essentials、gcc-multilib 和 g++-multilib。

我已重新安装 Visual Studio Code for Linux Mint。

我已经添加了 Visual Studio 的 configuration.json 的路径(设置-> 搜索 c_cpp_confiuration.json 或类似的,或在设置-> c/c++ 扩展 -> 配置文件下)

{ 
"window.zoomLevel": -3, 
"workbench.colorTheme": "Visual Studio Light - C++", 
"editor.minimap.enabled": false, 
"files.autoSave": "afterDelay", 
"C_Cpp.default.browse.path": [], 
"C_Cpp.default.compilerPath": "", 
"C_Cpp.default.customConfigurationVariables": {}, 
"C_Cpp.default.defines": [], 
"C_Cpp.default.includePath": [ "/usr/lib/gcc/x86_64-linux-gnu/9/include", "/usr/include", "usr/local/include", "/usr/include/php/20190902", "/usr/include/php/20190902/main", "/usr/include/php/20190902/Zend", "/usr/include/php/20190902/TSRM", "${workspaceRoot}", "$(VC_IncludePath)", "$(UniversalCRT_IncludePath)" ]
}

我已将环境变量C_INCLUDE_PATH添加到

#/etc/environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/drb/lampstack-7.4.11-0/.symfony/bin:/drb/lampstack-7.4.11-0/php/bin:";
C_INCLUDE_PATH="/usr/lib/gcc/x86_64-linux-gnu/9/include:/usr/include:usr/local/include:/usr/include/php/20190902:/usr/include/php/20190902/main:/usr/include/php/20190902/Zend:/usr/include/php/20190902/TSRM:"

我已经重启了电脑。

Visual Studio 没有显示问题。 但是make 不起作用(不显示任何错误,但不会产生php-extension.lo*.la), sudo make install 不起作用(不显示任何错误,但不产生php-extension.so) 而gcc 找不到头文件。

制作了一个简单的 shell 脚本来设置项目文件夹中的 C_INCLUDE_PATH

#env.sh
#!/bin/bash

C_INCLUDE_PATH="/usr/lib/gcc/x86_64-linux-gnu/9/include:/usr/include:usr/local/include:/usr/include/php/20190902:/usr/include/php/20190902/main:/usr/include/php/20190902/Zend:/usr/include/php/20190902/TSRM:"
export C_INCLUDE_PATH

CPATH="/usr/lib/gcc/x86_64-linux-gnu/9/include:/usr/include:usr/local/include:/usr/include/php/20190902:/usr/include/php/20190902/main:/usr/include/php/20190902/Zend:/usr/include/php/20190902/TSRM:"
export CPATH

echo "set C_INCLUDE_PATH to"
printenv C_INCLUDE_PATH

但是make 不起作用并且gcc 找不到标题。

尝试从命令行设置 $ gcc -I "usr/include/php/201990902:/usr/include/php/20190902/main" tsub76.c

给出与标头不存在相同的致命错误。检查文件夹,标题存在为/usr/include/php/20190902/main/php.h

gccmake的配置文件在哪里设置头文件的包含路径?

【问题讨论】:

  • PATH 变量用于查找二进制文件/脚本而不是源代码
  • 保存包含头文件路径信息的文件在哪里?
  • 您是否阅读过GCCGNU make 的文档 - 两者都在线!你可以使用GNU emacs编辑器,下载并学习GNU make和GNU bash的源代码
  • 如果允许,您也可以(在阅读文档后)下载源代码、编译并使用remake。但是 GNU make 的工作原理与文档一致,而且由于它是免费软件,因此您可以下载它、研究它的源代码并改进它
  • 我不太了解 Visual Studio Code,但我建议在使用之前阅读 its documentation。你也可以阅读Advanced Linux Programmingsyscalls(2)

标签: c linux gcc makefile php-extension


【解决方案1】:

原因是php扩展代码中的一些错误,比如变量名错误,比如72而不是76 zend_function_entry tsub72_functions[] = {... 而不是zend_function_entry tsub76_functions[] = {... (不知道在哪些地方,出现了多少次)

包含任何标题的 simple_file.c 正在工作。

gcc  simple_file.c -lm -g

仅对我无法显示的 extension.c 不起作用,它不是公开的。 但是,如果有人知道设置 make 和 gcc 配置变量设置 headers include paths 的文件名,请给我写信。

【讨论】:

  • 我不懂 php,但是在编译 python 扩展时,您必须链接到 python 库并提供包含路径。在 linux 上,您通常可以分别使用 pkg-config --libs <name of package>pkg-config --cflags <name of package> 获得这些标志。 Python 提供了关于编译扩展的很好的指导方针,也许 php 也是如此。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-01
相关资源
最近更新 更多