在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)
答案 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
由于所有错误,构建不会成功,并且会告诉您。