有没有更简单的方法来编译该项目

时间:2019-10-30 03:58:41

标签: c cmake sdl clion

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

这是整个源代码的link

任何帮助将不胜感激

我试图重写.h文件。主要是有关链接SDL和SDL_images的问题。

我尝试使用<script> $.get("test.php", { "test": "test" }).done(function(data) { var displayString = ""; $.each(JSON.parse(data), function(key, value) { displayString += "<tr>" + "<td>" + '<a class="btn btn-xs btn-default btn-flat" target="_blank" href="view.php?param=' + value['APPLICATION_STATUS'] + ' ">' + '<i class="fa fa-eye"></i> ' + '</a>' + "</td>"; displayString += "<td>"; // make a condition if (value['APPLICATION_STATUS'] == 'APPROVED') { displayString += 'hide button'; } else { displayString += '<a class="btn btn-xs btn-warning btn-flat" target="_blank" href="edit.php?param=' + value['APPLICATION_STATUS'] + ' ">' + '<i class="fa fa-pencil"></i>' + '</a>'; } displayString += "</td>"; displayString += "</tr>"; }); $('#fTableBody').css("display", "none"); $("#tableBody").html(displayString); $("#table-view").dataTable({ dom: 'Blfrtip', scrollX: true, buttons: [ 'copy', 'csv', 'excel', 'pdf', 'print' ], "lengthMenu": [ [10, 25, 50, -1], [10, 25, 50, "All"] ] }); }); 编译主体。

这是CMakeLists.txt

gcc main.c -o main -lSDL -lSDL_image

错误是:

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)

1 个答案:

答案 0 :(得分:2)

如果遇到此类错误,则需要调查每个错误:


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

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


/usr/bin/ld: skipping incompatible /home/mahamad/github/SOKOBAN/SOKOBAN/lib/libSDL.a when searching for -lSDL

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

该库适用于哪个系统?

您是自己编译还是下载了?


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

deplacerJoueur的引用(调用),但您没有定义它。否则带有定义(实现)的源文件不会添加到模块列表中。


CMakeFiles/SOKOBANR.dir/fichiers.c.o: In function `sauvegarderNiveau':
/home/mahamad/github/SOKOBAN/SOKOBAN/fichiers.c:67: undefined reference to `fprint'

这显然是一个错字。您的意思是fprintf()的后面一定是'f'。


collect2: error: ld returned 1 exit status

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


CMakeFiles/SOKOBANR.dir/build.make:128: recipe for target 'SOKOBANR' failed

由于所有错误,构建不会成功,并且会告诉您。