MSYS2环境下g++编译仅生成.o文件无exe如何运行
问题根因
编译命令中添加的-c参数会告知g++仅执行编译、汇编步骤,跳过链接环节,因此执行后只会生成test_arb.o目标文件,不会产出可执行程序。
另外两个导致运行失败的细节:
- Windows环境下(包括MSYS2中的g++),未指定输出文件名时编译生成的默认可执行文件为
a.exe,并非Linux环境下的a.out,直接执行./a.out必然会提示找不到文件。 - 你写的头文件搜索路径混用了正斜杠和反斜杠,MSYS2路径解析时容易出现转义问题,统一使用正斜杠可以避免这类无意义报错。
正确编译运行步骤
- 去掉命令中的
-c参数,完成编译+链接全流程。如果你的代码只需要引用arb目录下的头文件,不需要链接额外的二进制库,直接执行以下命令即可:
g++ -I"C:/Users/hp/Documents/Projects/arb" test_arb.cpp -o test_arb.exe
- 如果执行上述命令时出现
undefined reference类报错,说明代码依赖arb的预编译库文件,需要补充库搜索路径和链接参数。假设arb的库文件存放在C:/Users/hp/Documents/Projects/arb/lib路径下,库名为arb,使用如下命令编译:
g++ -I"C:/Users/hp/Documents/Projects/arb" -L"C:/Users/hp/Documents/Projects/arb/lib" test_arb.cpp -o test_arb.exe -larb
- 编译无报错后,当前目录会生成
test_arb.exe,在MSYS2终端执行./test_arb.exe即可运行程序。
内容的提问来源于stack exchange,提问作者ishandutta2007
相关产品推荐
相关产品推荐

