我有一个C语言的项目,它在visual studio中编译得很好,没有任何问题。但由于某些原因,我需要在CodeBlocks中编译它。我找不到在构建项目时出现此错误的原因。这是完整的构建日志:
mingw32-gcc.exe -g -W -O0 -DWIN32 -D_DEBUG -D_WINDOWS -D_USRDLL -DSERVICE_EXPORTS -DAXIS2_DECLARE_EXPORT -IC:Toolsaxis2c-bin-1.6.0-win32include -I. -IC:Toolsaxis2c-bin-1.6.0-win32include -IC:Toolsaxis2c-bin-1.6.0-win32includeplatforms -IE:devCodeBlocksMinGW -c C:Toolsaxis2c-bin-1.6.0-win32bintoolswsdl2csrc_addToDatabase_CodeBlocksadb_Person.c -o "Debug Win32adb_Person.o"
mingw32-gcc.exe -g -W -O0 -DWIN32 -D_DEBUG -D_WINDOWS -D_USRDLL -DSERVICE_EXPORTS -DAXIS2_DECLARE_EXPORT -IC:Toolsaxis2c-bin-1.6.0-win32include -I. -IC:Toolsaxis2c-bin-1.6.0-win32include -IC:Toolsaxis2c-bin-1.6.0-win32includeplatforms -IE:devCodeBlocksMinGW -c C:Toolsaxis2c-bin-1.6.0-win32bintoolswsdl2csrc_addToDatabase_CodeBlocksadb_addTodatabaseMethod.c -o "Debug Win32adb_addTodatabaseMethod.o"
mingw32-gcc.exe -g -W -O0 -DWIN32 -D_DEBUG -D_WINDOWS -D_USRDLL -DSERVICE_EXPORTS -DAXIS2_DECLARE_EXPORT -IC:Toolsaxis2c-bin-1.6.0-win32include -I. -IC:Toolsaxis2c-bin-1.6.0-win32include -IC:Toolsaxis2c-bin-1.6.0-win32includeplatforms -IE:devCodeBlocksMinGW -c C:Toolsaxis2c-bin-1.6.0-win32bintoolswsdl2csrc_addToDatabase_CodeBlocksadb_addTodatabaseMethodResponse.c -o "Debug Win32adb_addTodatabaseMethodResponse.o"
mingw32-gcc.exe -g -W -O0 -DWIN32 -D_DEBUG -D_WINDOWS -D_USRDLL -DSERVICE_EXPORTS -DAXIS2_DECLARE_EXPORT -IC:Toolsaxis2c-bin-1.6.0-win32include -I. -IC:Toolsaxis2c-bin-1.6.0-win32include -IC:Toolsaxis2c-bin-1.6.0-win32includeplatforms -IE:devCodeBlocksMinGW -c C:Toolsaxis2c-bin-1.6.0-win32bintoolswsdl2csrc_addToDatabase_CodeBlocksaxis2_extension_mapper.c -o "Debug Win32axis2_extension_mapper.o"
mingw32-gcc.exe -g -W -O0 -DWIN32 -D_DEBUG -D_WINDOWS -D_USRDLL -DSERVICE_EXPORTS -DAXIS2_DECLARE_EXPORT -IC:Toolsaxis2c-bin-1.6.0-win32include -I. -IC:Toolsaxis2c-bin-1.6.0-win32include -IC:Toolsaxis2c-bin-1.6.0-win32includeplatforms -IE:devCodeBlocksMinGW -c C:Toolsaxis2c-bin-1.6.0-win32bintoolswsdl2csrc_addToDatabase_CodeBlocksaxis2_stub_AddToDatabaseService.c -o "Debug Win32axis2_stub_AddToDatabaseService.o"
mingw32-gcc.exe -g -W -O0 -DWIN32 -D_DEBUG -D_WINDOWS -D_USRDLL -DSERVICE_EXPORTS -DAXIS2_DECLARE_EXPORT -IC:Toolsaxis2c-bin-1.6.0-win32include -I. -IC:Toolsaxis2c-bin-1.6.0-win32include -IC:Toolsaxis2c-bin-1.6.0-win32includeplatforms -IE:devCodeBlocksMinGW -c C:Toolsaxis2c-bin-1.6.0-win32bintoolswsdl2csrc_addToDatabase_CodeBlocksmain.c -o "Debug Win32main.o"
mingw32-gcc.exe -g -W -O0 -DWIN32 -D_DEBUG -D_WINDOWS -D_USRDLL -DSERVICE_EXPORTS -DAXIS2_DECLARE_EXPORT -IC:Toolsaxis2c-bin-1.6.0-win32include -I. -IC:Toolsaxis2c-bin-1.6.0-win32include -IC:Toolsaxis2c-bin-1.6.0-win32includeplatforms -IE:devCodeBlocksMinGW -c C:Toolsaxis2c-bin-1.6.0-win32bintoolswsdl2csrc_addToDatabase_CodeBlocksadb_Message.c -o "Debug Win32adb_Message.o"
mingw32-g++.exe -LC:Toolsaxis2c-bin-1.6.0-win32lib -LC:Toolsaxis2c-bin-1.6.0-win32lib -LE:devCodeBlocksMinGWlib -o AddToDatabaseServiceClient.exe "Debug Win32adb_Person.o" "Debug Win32adb_addTodatabaseMethod.o" "Debug Win32adb_addTodatabaseMethodResponse.o" "Debug Win32axis2_extension_mapper.o" "Debug Win32axis2_stub_AddToDatabaseService.o" "Debug Win32main.o" "Debug Win32adb_Message.o" C:Toolsaxis2c-bin-1.6.0-win32lib C:Toolsaxis2c-bin-1.6.0-win32libaxiom.lib C:Toolsaxis2c-bin-1.6.0-win32libaxutil.lib C:Toolsaxis2c-bin-1.6.0-win32libaxis2_engine.lib
e:/dev/codeblocks/mingw/bin/../lib/gcc/mingw32/4.4.1/../../../../mingw32/bin/ld.exe: C:Toolsaxis2c-bin-1.6.0-win32lib: 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 Web服务客户端。
我将-fPI
C放在编译器设置下的其他选项选项卡中。然后我重建了这个项目。正如CodeBlocks wiki中提到的那样。我试着运行应用程序,但又出现了错误。
我在这个链接中发布了另一个与这个问题有关的问题。如果有人帮我,我将不胜感激。
你看到链接器的错误消息说:吗
C: \Tools\axis2c-bin-1.6.0-win32\lib:没有这样的文件
这是因为没有像C:Toolsaxis2c-bin-1.6.0-win32lib
这样的文件。它是一个目录,不能"链接目录",就像不能"编译目录"一样。
我们可以确定它是一个目录,因为你链接的所有库都在中:
C:Toolsaxis2c-bin-1.6.0-win32libaxiom.lib
C:Toolsaxis2c-bin-1.6.0-win32libaxutil.lib
C:Toolsaxis2c-bin-1.6.0-win32libaxis2_engine.lib
还因为您已经指定(两次)它是链接器应该搜索以查找库的目录:
-LC:Toolsaxis2c-bin-1.6.0-win32lib -LC:Toolsaxis2c-bin-1.6.0-win32lib
您需要:
- 用替换链接库设置中的
C:Toolsaxis2c-bin-1.6.0-win32lib
C:Toolsaxis2c-bin-1.6.0-win32lib<name_of_some_missing_library>.lib
或者,如果没有丢失的库(以上3个都是您需要的),那么:
- 从链接库设置中删除
C:Toolsaxis2c-bin-1.6.0-win32lib
您也可以从其他链接器选项中删除-LC:Toolsaxis2c-bin-1.6.0-win32lib
(如果您就是这样指定这个链接器搜索路径的),和/或您可以删除搜索目录->链接器中的C:Toolsaxis2c-bin-1.6.0-win32lib
(如果你就是这么做的)。您正在按绝对值指定所有axis
库路径名,所以不需要告诉链接器在哪里查找它们。
您可能还通过指定产生了此重复的链接器搜索路径一次在设置->编译器->全局编译器设置中,另一次在链接器设置索项目的目录->Linker。如果是,请将其从全局编译器设置中删除。这些设置是您希望应用于使用编译器构建的每个项目的设置:这就是Global的意义所在。
-fPIC
没有任何相关性,您不需要它来构建.exe
我照@Mike Kinghan说的做了。另外,我搜索发现我使用的库是用MSVC++编译的,不能与MinGW一起使用。根据这个主题。
- 我使用reimap创建了.def文件
- 然后我修改了.def文件中的每个stdcall函数(我更改了"_name@ordinal"到"name")
- 然后我使用dlltool创建.a文件
我将.a文件链接到我的项目。一切都很顺利,我可以编译我的项目了。但当我尝试运行它时,我会遇到这个错误。
在动态链接库中找不到过程入口点公理_attribute_create
我不知道该怎么办。