Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 有没有更简单的方法来编译这个项目_C_Cmake_Sdl_Clion - Fatal编程技术网

C 有没有更简单的方法来编译这个项目

C 有没有更简单的方法来编译这个项目,c,cmake,sdl,clion,C,Cmake,Sdl,Clion,在Linux(Ubuntu)下,我正在用CLion编写一个CMakeLists.txt来编译我的项目,这是一个用C编写的小游戏。我如何修复这些错误 下面是对整个源代码的一个简单介绍 任何帮助都将不胜感激 我试图重写我的.h文件。这主要是关于链接SDL和SDL_图像的问题 我试图用gcc main.c-o main-lSDL-lSDL_image编译main 这是CMakeLists.txt cmake_minimum_required(VERSION 3.7) project(SOKOBAN)

在Linux(Ubuntu)下,我正在用CLion编写一个CMakeLists.txt来编译我的项目,这是一个用C编写的小游戏。我如何修复这些错误

下面是对整个源代码的一个简单介绍

任何帮助都将不胜感激

我试图重写我的.h文件。这主要是关于链接SDL和SDL_图像的问题

我试图用gcc main.c-o main-lSDL-lSDL_image编译main

这是CMakeLists.txt

cmake_minimum_required(VERSION 3.7)

project(SOKOBAN)

set(CMAKE_C_STANDARD 99)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -lmingw32")
set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++")

include_directories(${PROJECT_SOURCE_DIR}/include)
link_directories(${PROJECT_SOURCE_DIR}/lib)

find_package(SDL REQUIRED)
find_package(SDL)
find_package(SDL_image)



set(SOURCE_FILES main.c jeu.c jeu.h editeur.c editeur.h
        fichiers.c fichiers.h Constantes.h  hsokoban.h)

add_executable(SOKOBANR ${SOURCE_FILES})

target_link_libraries(SOKOBANR SDL_image SDL)

错误是:

[ 20%] Linking C executable SOKOBANR
CMakeFiles/SOKOBANR.dir/jeu.c.o: In function `jouer':
/home/mahamad/github/SOKOBAN/SOKOBAN/jeu.c:12: multiple definition of `jouer'
CMakeFiles/SOKOBANR.dir/main.c.o:/home/mahamad/github/SOKOBAN/SOKOBAN/jeu.c:12: first defined here
/usr/bin/ld: skipping incompatible /home/mahamad/github/SOKOBAN/SOKOBAN/lib/libSDL.a when searching for -lSDL
CMakeFiles/SOKOBANR.dir/main.c.o: In function `jouer':
/home/mahamad/github/SOKOBAN/SOKOBAN/jeu.c:72: undefined reference to `deplacerJoueur'
/home/mahamad/github/SOKOBAN/SOKOBAN/jeu.c:76: undefined reference to `deplacerJoueur'
/home/mahamad/github/SOKOBAN/SOKOBAN/jeu.c:80: undefined reference to `deplacerJoueur'
/home/mahamad/github/SOKOBAN/SOKOBAN/jeu.c:84: undefined reference to `deplacerJoueur'
CMakeFiles/SOKOBANR.dir/jeu.c.o: In function `jouer':
/home/mahamad/github/SOKOBAN/SOKOBAN/jeu.c:72: undefined reference to `deplacerJoueur'
CMakeFiles/SOKOBANR.dir/jeu.c.o:/home/mahamad/github/SOKOBAN/SOKOBAN/jeu.c:76: more undefined references to `deplacerJoueur' follow
CMakeFiles/SOKOBANR.dir/fichiers.c.o: In function `sauvegarderNiveau':
/home/mahamad/github/SOKOBAN/SOKOBAN/fichiers.c:67: undefined reference to `fprint'
collect2: error: ld returned 1 exit status
CMakeFiles/SOKOBANR.dir/build.make:128: recipe for target 'SOKOBANR' failed
make[3]: *** [SOKOBANR] Error 1
CMakeFiles/Makefile2:72: recipe for target 'CMakeFiles/SOKOBANR.dir/all' failed
make[2]: *** [CMakeFiles/SOKOBANR.dir/all] Error 2
CMakeFiles/Makefile2:84: recipe for target 'CMakeFiles/SOKOBANR.dir/rule' failed
make[1]: *** [CMakeFiles/SOKOBANR.dir/rule] Error 2
Makefile:118: recipe for target 'SOKOBANR' failed
make: *** [SOKOBANR] Error 2```

如果您遇到此类错误,您需要逐一查看:


链接器认为您(至少)对
jouer
有两种定义。由于两个引用位置相同,我假设您1。在“main.c”中包含“jeu.c”而不是“jeu.h”,以及2。链接“main.o”和“jeu.o”


您提供的库“libSDL.a”与目标系统不兼容。您的目标系统似乎是Linux

图书馆适用于哪种系统

你是自己编译的还是下载的


deplacerJouer
的引用(调用),但您没有定义它。或者具有定义(实现)的源文件未添加到模块列表中


这显然是一个打字错误。您的意思是肯定带有尾随“f”的
fprintf()


由于所有的错误,链接器没有成功,它会告诉您



由于所有的错误,构建没有成功,它告诉您。

我假设
deplacerjouer
是您编写的函数?如果是这样,请确保您正在编译实现该函数的源文件。它位于定义为原型的jeu.h中。另外,由于您提到了这一点,当我将鼠标指针悬停在jeu.h中的函数jouer上时,我看到SDL_Surface是一个未知的类型名。它是在哪里实现的?您需要确保正在生成该源文件。您的构建错误是因为链接器找不到该函数的实现。不管怎样,你说的一切都很有用,因为我在另一个函数中使用了函数,main.c中包含的顺序也不是最好的。谢谢!通过下载正确的库并在我的系统上使用/包含时替换它,修复了目标库问题
CMakeFiles/SOKOBANR.dir/jeu.c.o: In function `jouer':
/home/mahamad/github/SOKOBAN/SOKOBAN/jeu.c:12: multiple definition of `jouer'
CMakeFiles/SOKOBANR.dir/main.c.o:/home/mahamad/github/SOKOBAN/SOKOBAN/jeu.c:12: first defined here
/usr/bin/ld: skipping incompatible /home/mahamad/github/SOKOBAN/SOKOBAN/lib/libSDL.a when searching for -lSDL
CMakeFiles/SOKOBANR.dir/main.c.o: In function `jouer':
/home/mahamad/github/SOKOBAN/SOKOBAN/jeu.c:72: undefined reference to `deplacerJoueur'
/home/mahamad/github/SOKOBAN/SOKOBAN/jeu.c:76: undefined reference to `deplacerJoueur'
/home/mahamad/github/SOKOBAN/SOKOBAN/jeu.c:80: undefined reference to `deplacerJoueur'
/home/mahamad/github/SOKOBAN/SOKOBAN/jeu.c:84: undefined reference to `deplacerJoueur'
CMakeFiles/SOKOBANR.dir/jeu.c.o: In function `jouer':
/home/mahamad/github/SOKOBAN/SOKOBAN/jeu.c:72: undefined reference to `deplacerJoueur'
CMakeFiles/SOKOBANR.dir/jeu.c.o:/home/mahamad/github/SOKOBAN/SOKOBAN/jeu.c:76: more undefined references to `deplacerJoueur' follow
CMakeFiles/SOKOBANR.dir/fichiers.c.o: In function `sauvegarderNiveau':
/home/mahamad/github/SOKOBAN/SOKOBAN/fichiers.c:67: undefined reference to `fprint'
collect2: error: ld returned 1 exit status
CMakeFiles/SOKOBANR.dir/build.make:128: recipe for target 'SOKOBANR' failed