我一直在尝试编译和链接Qt5,这意味着我一直在搞乱一些ldconfig并包含我不完全理解的路径默认值。我将尽力将我的问题限制在一个非常具体的问题上,因为我的优先事项是修复我的编译器。
我用过命令试试
`gcc -print-prog-name=cc1plus` -v
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../x86_64-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/include/c++/4.7
/usr/include/c++/4.7/x86_64-linux-gnu
/usr/include/c++/4.7/backward
/usr/lib/gcc/x86_64-linux-gnu/4.7/include
/usr/local/include
/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed
/usr/include
End of search list.
在开头有一个有问题的行,关于在搜索标题时忽略不存在的目录。不幸的是,这正是g ++认为寻找crt1.o的好主意,我认为这是一种将main()函数转换为可执行文件的二进制文件:
g++ -Isrc --std=c++11 -g -c -o src/tissuecell.o src/tissuecell.cpp
g++ -Isrc --std=c++11 -g -c -o src/analyze.o src/analyze.cpp
g++ -o TissueCells src/tissuecell.o src/analyze.o
/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: error: ld returned 1 exit status
我的编译器直到几个小时前还没有这样做(之前它会编译!),我输入的“不可逆命令”的想法是单一的:
sudo ldconfig
任何人都可以让我摆脱这个链接和编译问题的可怕陷阱,并从我的包含路径中删除这个讨厌的行吗?
您可能也能回答的一些问题会让我感到非常高兴:
答案 0 :(得分:3)
以下命令允许我测试编译器是否存在内部错误:
echo "int main() { return 0; }" > /tmp/test.c; gcc -v /tmp/test.c
我退回到我的git上的旧提交,并将我的代码编译,这对我的编译器的理智进行了很好的仔细检查。
答案 1 :(得分:2)
首先,您可以使用“-v”选项运行gcc(g ++),例如:
echo "int main() { return 0; }" > /tmp/test.c
gcc -v /tmp/test.c
您可以在输出中找到类似的内容:
--with-gxx-include-dir=/usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/include/g++-v4
加
#include <...> search starts here:
/usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/include
/usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/include-fixed
/usr/include
LIBRARY_PATH=/usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/:/usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/../../../../x86_64-pc-linux-gnu/lib/:/usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/../../../:/lib/:/usr/lib/
还有很多其他的东西。
您可以在命令前面使用“strace -f”的第二个变体,grep输出模式打开以找出使用的位置和文件。