将 SDL 库与自定义库结合使用会在使用第二个库时中断

问题描述 投票:0回答:2

我能够成功地将 SDL 库包含到我的 C 程序中,并能够使用以下代码打开一个窗口:

#include <stdio.h>
#include <SDL.h>
#include <MCSControl.h>


int initialize_window(void){
    if (0 != SDL_Init((SDL_INIT_EVERYTHING))){
        fprintf(stderr, "Error initializing SDL.\n");
        return 0;
    }
}

int main(int argc, char *argv[]) {
    initialize_window();
    SDL_Window* win = SDL_CreateWindow("GAME",
                                       SDL_WINDOWPOS_CENTERED,
                                       SDL_WINDOWPOS_CENTERED,
                                       1000, 1000, 0);
    float i=0;
    while (i<900000){
        i++;
    }



    return 0;

}

我用于该项目的 cmake 文件如下所示:

cmake_minimum_required(VERSION 3.27)
project(FullBuild.12.2.24.1 C)

set(CMAKE_C_STANDARD 11)

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "C:/Users/sbraun/CLionProjects/SDLAttempt1/cmake-build-debug")

add_executable(FullBuild.12.2.24.1 main.c)



find_package(SDL2 REQUIRED)
include_directories(${SDL2_INCLUDE_DIRS})
target_link_libraries(FullBuild.12.2.24.1 ${SDL2_LIBRARIES})

include_directories("C:/SDK/include")
target_link_libraries(FullBuild.12.2.24.1 "C:/SDK/lib/MCSControl.lib")


虽然不太好,但确实有效。 至少我认为是因为当我添加这些代码行时:

    SA_INDEX mcsHandle;
    const char locMCS1[] = "network:192.168.1.210:5000";
    SA_OpenSystem(&mcsHandle,locMCS1,"sync");
    SA_CloseSystem(mcsHandle);

正在使用

MCSControl.h
库,整个事情突然不再起作用了。

====================[ Build | FullBuild.12.2.24.1 | Debug ]=====================
"C:\Program Files\JetBrains\CLion 2023.3.3\bin\cmake\win\x64\bin\cmake.exe" --build C:\Users\sbraun\CLionProjects\FullBuild.12.2.24.1\cmake-build-debug --target FullBuild.12.2.24.1 -j 18
[1/2] Building C object CMakeFiles/FullBuild.12.2.24.1.dir/main.c.obj
[2/2] Linking C executable FullBuild.12.2.24.1.exe
FAILED: FullBuild.12.2.24.1.exe 
cmd.exe /C "cd . && C:\PROGRA~1\JETBRA~1\CLION2~1.3\bin\mingw\bin\gcc.exe -g -Wl,--undefined=WinMain CMakeFiles/FullBuild.12.2.24.1.dir/main.c.obj -o FullBuild.12.2.24.1.exe -Wl,--out-implib,libFullBuild.12.2.24.1.dll.a -Wl,--major-image-version,0,--minor-image-version,0 -LC:/MinGW/lib C:/MinGW/lib/libSDL2main.a  C:/MinGW/lib/libSDL2.dll.a  C:/SDK/lib/MCSControl.lib  -mwindows  -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 && cd ."
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: skipping incompatible C:/MinGW/lib/libkernel32.a when searching for -lkernel32
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: skipping incompatible C:/MinGW/lib\libkernel32.a when searching for -lkernel32
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: skipping incompatible C:/MinGW/lib/libuser32.a when searching for -luser32
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: skipping incompatible C:/MinGW/lib\libuser32.a when searching for -luser32
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: skipping incompatible C:/MinGW/lib/libgdi32.a when searching for -lgdi32
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: skipping incompatible C:/MinGW/lib\libgdi32.a when searching for -lgdi32
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: skipping incompatible C:/MinGW/lib/libwinspool.a when searching for -lwinspool
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: skipping incompatible C:/MinGW/lib\libwinspool.a when searching for -lwinspool
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: skipping incompatible C:/MinGW/lib/libshell32.a when searching for -lshell32
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: skipping incompatible C:/MinGW/lib\libshell32.a when searching for -lshell32
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: skipping incompatible C:/MinGW/lib/libole32.a when searching for -lole32
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: skipping incompatible C:/MinGW/lib\libole32.a when searching for -lole32
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: skipping incompatible C:/MinGW/lib/liboleaut32.a when searching for -loleaut32
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: skipping incompatible C:/MinGW/lib\liboleaut32.a when searching for -loleaut32
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: skipping incompatible C:/MinGW/lib/libuuid.a when searching for -luuid
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: skipping incompatible C:/MinGW/lib\libuuid.a when searching for -luuid
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: skipping incompatible C:/MinGW/lib/libcomdlg32.a when searching for -lcomdlg32
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: skipping incompatible C:/MinGW/lib\libcomdlg32.a when searching for -lcomdlg32
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: skipping incompatible C:/MinGW/lib/libadvapi32.a when searching for -ladvapi32
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: skipping incompatible C:/MinGW/lib\libadvapi32.a when searching for -ladvapi32
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: skipping incompatible C:/MinGW/lib/libmingw32.a when searching for -lmingw32
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: skipping incompatible C:/MinGW/lib\libmingw32.a when searching for -lmingw32
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: skipping incompatible C:/MinGW/lib/libmoldname.a when searching for -lmoldname
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: skipping incompatible C:/MinGW/lib\libmoldname.a when searching for -lmoldname
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: skipping incompatible C:/MinGW/lib/libmingwex.a when searching for -lmingwex
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: skipping incompatible C:/MinGW/lib\libmingwex.a when searching for -lmingwex
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: skipping incompatible C:/MinGW/lib/libmsvcrt.a when searching for -lmsvcrt
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: skipping incompatible C:/MinGW/lib\libmsvcrt.a when searching for -lmsvcrt
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: skipping incompatible C:/MinGW/lib/libkernel32.a when searching for -lkernel32
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: skipping incompatible C:/MinGW/lib\libkernel32.a when searching for -lkernel32
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: skipping incompatible C:/MinGW/lib/libgdi32.a when searching for -lgdi32
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: skipping incompatible C:/MinGW/lib\libgdi32.a when searching for -lgdi32
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: skipping incompatible C:/MinGW/lib/libcomdlg32.a when searching for -lcomdlg32
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: skipping incompatible C:/MinGW/lib\libcomdlg32.a when searching for -lcomdlg32
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: skipping incompatible C:/MinGW/lib/libadvapi32.a when searching for -ladvapi32
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: skipping incompatible C:/MinGW/lib\libadvapi32.a when searching for -ladvapi32
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: skipping incompatible C:/MinGW/lib/libshell32.a when searching for -lshell32
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: skipping incompatible C:/MinGW/lib\libshell32.a when searching for -lshell32
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: skipping incompatible C:/MinGW/lib/libuser32.a when searching for -luser32
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: skipping incompatible C:/MinGW/lib\libuser32.a when searching for -luser32
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: skipping incompatible C:/MinGW/lib/libkernel32.a when searching for -lkernel32
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: skipping incompatible C:/MinGW/lib\libkernel32.a when searching for -lkernel32
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: skipping incompatible C:/MinGW/lib/libiconv.dll.a when searching for -liconv
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: skipping incompatible C:/MinGW/lib/libiconv.a when searching for -liconv
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: skipping incompatible C:/MinGW/lib\libiconv.a when searching for -liconv
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: skipping incompatible C:/MinGW/lib/libmingw32.a when searching for -lmingw32
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: skipping incompatible C:/MinGW/lib\libmingw32.a when searching for -lmingw32
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: skipping incompatible C:/MinGW/lib/libmoldname.a when searching for -lmoldname
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: skipping incompatible C:/MinGW/lib\libmoldname.a when searching for -lmoldname
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: skipping incompatible C:/MinGW/lib/libmingwex.a when searching for -lmingwex
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: skipping incompatible C:/MinGW/lib\libmingwex.a when searching for -lmingwex
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: skipping incompatible C:/MinGW/lib/libmsvcrt.a when searching for -lmsvcrt
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: skipping incompatible C:/MinGW/lib\libmsvcrt.a when searching for -lmsvcrt
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: skipping incompatible C:/MinGW/lib/libkernel32.a when searching for -lkernel32
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: skipping incompatible C:/MinGW/lib\libkernel32.a when searching for -lkernel32
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: CMakeFiles/FullBuild.12.2.24.1.dir/main.c.obj: in function `SDL_main':
C:/Users/sbraun/CLionProjects/FullBuild.12.2.24.1/main.c:27: undefined reference to `__imp_SA_OpenSystem'
C:\Program Files\JetBrains\CLion 2023.3.3\bin\mingw\bin/ld.exe: C:/Users/sbraun/CLionProjects/FullBuild.12.2.24.1/main.c:28: undefined reference to `__imp_SA_CloseSystem'
collect2.exe: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.

是我得到的错误代码,但问题是我知道代码和函数是正确的,因为它们无需 SDL 库即可工作。

换句话说:SDL 库可以工作,MCSControl 库也可以工作,但是如果我使用这两个库编写一个程序,它就会崩溃。我需要任何帮助。

c cmake
2个回答
1
投票
#include <stdio.h>
#include <SDL.h>
#include <MCSControl.h>


int initialize_window(void){
    if (0 != SDL_Init((SDL_INIT_EVERYTHING))){
        fprintf(stderr, "Error initializing SDL.\n");
        return 0;
    }
}

int main(int argc, char *argv[]) {
    initialize_window();
    SDL_Window* win = SDL_CreateWindow("GAME",
                                       SDL_WINDOWPOS_CENTERED,
                                       SDL_WINDOWPOS_CENTERED,
                                       10000, 10000, 0);
    float i=0;
    while (i<9000000000){
        i++;
    }



    return 0;

}

0
投票

我尝试将

target_link_libraries(FullBuild.12.2.24.1 "C:/SDK/lib/MCSControl.lib")
更改为
target_link_libraries(FullBuild.12.2.24.1 "C:/SDK/lib64/MCSControl.lib)
并且成功了! lib64 是包中提供的另一个 lib 文件夹。 不知道为什么它有效。也许另一个是为 32 个系统或 smthng 制作的

© www.soinside.com 2019 - 2024. All rights reserved.