无法在 CodeBlocks 中编译 c 项目。进程以状态 1 终止

Cannot compile a c project in CodeBlocks. Process terminated with status 1

我有一个 C 语言的项目,它在 visual studio 中编译得很好,没有任何问题。但由于某些原因,我需要在 CodeBlocks 中编译它。我找不到在构建项目时出现此错误的原因。这是完整的构建日志:

mingw32-gcc.exe  -g -W -O0 -DWIN32 -D_DEBUG -D_WINDOWS -D_USRDLL -DSERVICE_EXPORTS -DAXIS2_DECLARE_EXPORT    -IC:\Tools\axis2c-bin-1.6.0-win32\include -I. -IC:\Tools\axis2c-bin-1.6.0-win32\include -IC:\Tools\axis2c-bin-1.6.0-win32\include\platforms -IE:\dev\CodeBlocks\MinGW  -c C:\Tools\axis2c-bin-1.6.0-win32\bin\tools\wsdl2c\src_addToDatabase_CodeBlocks\adb_Person.c -o "Debug Win32\adb_Person.o"
mingw32-gcc.exe  -g -W -O0 -DWIN32 -D_DEBUG -D_WINDOWS -D_USRDLL -DSERVICE_EXPORTS -DAXIS2_DECLARE_EXPORT    -IC:\Tools\axis2c-bin-1.6.0-win32\include -I. -IC:\Tools\axis2c-bin-1.6.0-win32\include -IC:\Tools\axis2c-bin-1.6.0-win32\include\platforms -IE:\dev\CodeBlocks\MinGW  -c C:\Tools\axis2c-bin-1.6.0-win32\bin\tools\wsdl2c\src_addToDatabase_CodeBlocks\adb_addTodatabaseMethod.c -o "Debug Win32\adb_addTodatabaseMethod.o"
mingw32-gcc.exe  -g -W -O0 -DWIN32 -D_DEBUG -D_WINDOWS -D_USRDLL -DSERVICE_EXPORTS -DAXIS2_DECLARE_EXPORT    -IC:\Tools\axis2c-bin-1.6.0-win32\include -I. -IC:\Tools\axis2c-bin-1.6.0-win32\include -IC:\Tools\axis2c-bin-1.6.0-win32\include\platforms -IE:\dev\CodeBlocks\MinGW  -c C:\Tools\axis2c-bin-1.6.0-win32\bin\tools\wsdl2c\src_addToDatabase_CodeBlocks\adb_addTodatabaseMethodResponse.c -o "Debug Win32\adb_addTodatabaseMethodResponse.o"
mingw32-gcc.exe  -g -W -O0 -DWIN32 -D_DEBUG -D_WINDOWS -D_USRDLL -DSERVICE_EXPORTS -DAXIS2_DECLARE_EXPORT    -IC:\Tools\axis2c-bin-1.6.0-win32\include -I. -IC:\Tools\axis2c-bin-1.6.0-win32\include -IC:\Tools\axis2c-bin-1.6.0-win32\include\platforms -IE:\dev\CodeBlocks\MinGW  -c C:\Tools\axis2c-bin-1.6.0-win32\bin\tools\wsdl2c\src_addToDatabase_CodeBlocks\axis2_extension_mapper.c -o "Debug Win32\axis2_extension_mapper.o"
mingw32-gcc.exe  -g -W -O0 -DWIN32 -D_DEBUG -D_WINDOWS -D_USRDLL -DSERVICE_EXPORTS -DAXIS2_DECLARE_EXPORT    -IC:\Tools\axis2c-bin-1.6.0-win32\include -I. -IC:\Tools\axis2c-bin-1.6.0-win32\include -IC:\Tools\axis2c-bin-1.6.0-win32\include\platforms -IE:\dev\CodeBlocks\MinGW  -c C:\Tools\axis2c-bin-1.6.0-win32\bin\tools\wsdl2c\src_addToDatabase_CodeBlocks\axis2_stub_AddToDatabaseService.c -o "Debug Win32\axis2_stub_AddToDatabaseService.o"
mingw32-gcc.exe  -g -W -O0 -DWIN32 -D_DEBUG -D_WINDOWS -D_USRDLL -DSERVICE_EXPORTS -DAXIS2_DECLARE_EXPORT    -IC:\Tools\axis2c-bin-1.6.0-win32\include -I. -IC:\Tools\axis2c-bin-1.6.0-win32\include -IC:\Tools\axis2c-bin-1.6.0-win32\include\platforms -IE:\dev\CodeBlocks\MinGW  -c C:\Tools\axis2c-bin-1.6.0-win32\bin\tools\wsdl2c\src_addToDatabase_CodeBlocks\main.c -o "Debug Win32\main.o"
mingw32-gcc.exe  -g -W -O0 -DWIN32 -D_DEBUG -D_WINDOWS -D_USRDLL -DSERVICE_EXPORTS -DAXIS2_DECLARE_EXPORT    -IC:\Tools\axis2c-bin-1.6.0-win32\include -I. -IC:\Tools\axis2c-bin-1.6.0-win32\include -IC:\Tools\axis2c-bin-1.6.0-win32\include\platforms -IE:\dev\CodeBlocks\MinGW  -c C:\Tools\axis2c-bin-1.6.0-win32\bin\tools\wsdl2c\src_addToDatabase_CodeBlocks\adb_Message.c -o "Debug Win32\adb_Message.o"
mingw32-g++.exe -LC:\Tools\axis2c-bin-1.6.0-win32\lib -LC:\Tools\axis2c-bin-1.6.0-win32\lib -LE:\dev\CodeBlocks\MinGW\lib  -o AddToDatabaseServiceClient.exe "Debug Win32\adb_Person.o" "Debug Win32\adb_addTodatabaseMethod.o" "Debug Win32\adb_addTodatabaseMethodResponse.o" "Debug Win32\axis2_extension_mapper.o" "Debug Win32\axis2_stub_AddToDatabaseService.o" "Debug Win32\main.o" "Debug Win32\adb_Message.o"    C:\Tools\axis2c-bin-1.6.0-win32\lib C:\Tools\axis2c-bin-1.6.0-win32\lib\axiom.lib C:\Tools\axis2c-bin-1.6.0-win32\lib\axutil.lib C:\Tools\axis2c-bin-1.6.0-win32\lib\axis2_engine.lib 
e:/dev/codeblocks/mingw/bin/../lib/gcc/mingw32/4.4.1/../../../../mingw32/bin/ld.exe: C:\Tools\axis2c-bin-1.6.0-win32\lib: No such file: Permission denied
collect2: ld returned 1 exit status

Process terminated with status 1 (0 minutes, 8 seconds)
0 errors, 0 warnings

我正在使用 CodeBlocks 10.05 和 GNU GCC 编译器 (minGW)。该项目是一个 axis2c 生成的 C 网络服务客户端。

我将 -fPIC 放在 编译器设置 下的 其他选项 选项卡中。然后我重建了项目。正如 CodeBlocks-wiki 中提到的那样。我尝试 运行 该应用程序,但我再次遇到该错误。

我在 中发布了另一个与此问题相关的问题。如果有人帮助我,我将不胜感激。

您是否看到链接器的错误消息显示:

C:\Tools\axis2c-bin-1.6.0-win32\lib: No such file

那是因为没有C:\Tools\axis2c-bin-1.6.0-win32\lib这样的文件。它是一个目录,您不能 "link a directory",就像您不能 "compile a directory".

我们可以确定它是一个目录,因为您链接的所有库都那个目录中:

C:\Tools\axis2c-bin-1.6.0-win32\lib\axiom.lib 
C:\Tools\axis2c-bin-1.6.0-win32\lib\axutil.lib 
C:\Tools\axis2c-bin-1.6.0-win32\lib\axis2_engine.lib

还因为您已经指定(两次)它是链接器应该搜索以查找库的目录:

-LC:\Tools\axis2c-bin-1.6.0-win32\lib -LC:\Tools\axis2c-bin-1.6.0-win32\lib 

您需要:

  • Link 库 设置中的 C:\Tools\axis2c-bin-1.6.0-win32\lib 替换为 C:\Tools\axis2c-bin-1.6.0-win32\lib\<name_of_some_missing_library>.lib

或者,如果没有缺少的库(以上 3 个都是你需要的),那么:

  • 从您的 Link 库 设置中删除 C:\Tools\axis2c-bin-1.6.0-win32\lib

您还可以从其他链接器选项中删除-LC:\Tools\axis2c-bin-1.6.0-win32\lib (如果这就是您指定此链接器搜索路径的方式),and/or 您可以删除 C:\Tools\axis2c-bin-1.6.0-win32\lib 来自 搜索目录 -> Linker(如果 你就是这样做的)。您正在通过绝对指定所有 axis 库 路径名,因此无需告诉链接器在哪里寻找它们。

您可能还通过指定生成了这个重复的链接器搜索路径 一次在 设置 -> 编译器 -> 全局编译器设置 中,然后在 Linker 设置 中再次或 搜索您项目的目录 -> Linker。如果是这样,请将其从全局编译器设置中删除。 这些设置是您希望应用于使用编译器构建的每个项目的设置:这就是 Global 的重要性。

-fPIC 没有任何相关性,您不需要它来构建 .exe

我按照@Mike Kinghan 所说的做了。 另外我搜索并发现我正在使用的库是用 MSVC++ 编译的,不能与 MinGW 一起使用。根据 this 主题。

  • 我用 reimp
  • 创建了 .def 文件
  • 然后我修改了 .def 文件中的每个 stdcall 函数(我将“_name@ordinal”更改为 "name")
  • 然后我使用 dlltool 创建 .a 文件。

我将 .a 文件链接到我的项目。 一切顺利,我可以编译我的项目。但是当我尝试 运行 时。我收到此错误。

The procedure entry point axiom_attribute_create could not be located in the dynamic link library

我不知道该怎么办。