как вы используете библиотеки (dll / lib) в проекте cmake с помощью Visual Studio 2019 - PullRequest
0 голосов
/ 08 мая 2020

У меня есть две библиотеки, которые я пытаюсь использовать SDL2 и ReactPhysics3D. пока я просто пытаюсь скомпилировать исходный код SDL2 в подкаталоге моего проекта и использовать его в простой программе на C ++, но я получаю сообщение об ошибке связывания.

моя файловая структура

-SDLReactGame
    -SDL2-2.0.12(source downloaded from libsdl.org)
    -ReactPhysics3D(source downloaded from reactphysics3d.com)
    -src
        -Game.cpp
    -CMakeLists.txt

Содержимое CMakeLists.txt выглядит следующим образом разными способами без особой удачи. похоже, что папка include из проекта sdl не попадает в папку out при сборке.

target_include_directories

это моя игра. cpp если я закомментирую все, кроме return 0; и просто включите SDL.hi получите ошибку. также я скомпилировал это без cmake и запустил. Я надеялся, что у меня могут быть библиотеки в одном

#include "SDL.h"

int main(int argc, char *argv[])
{
    /*SDL_Init(SDL_INIT_VIDEO);

    SDL_Window *window = SDL_CreateWindow(
        "SDL2Test",
        SDL_WINDOWPOS_UNDEFINED,
        SDL_WINDOWPOS_UNDEFINED,
        640,
        480,
        0
    );

    SDL_Renderer *renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_SOFTWARE);
    SDL_SetRenderDrawColor(renderer, 0, 0, 0, SDL_ALPHA_OPAQUE);
    SDL_RenderClear(renderer);
    SDL_RenderPresent(renderer);

    SDL_Delay(3000);

    SDL_DestroyWindow(window);
    SDL_Quit();*/

    return 0;
}

Сообщения об ошибках:

Код серьезности Описание Состояние подавления строки файла проекта

Ошибка LNK1120 1 неразрешенные внешние элементы. . \ out \ build \ x64-Debug \ SDLReactGame .. \ out \ build \ x64-Debug \ SDLReactGame.exe

Ошибка LNK2019 неразрешенный внешний символ main упоминается в функции "int __cdecl invoke_main (void)" (? invoke_main @@ YAHXZ) .. \ out \ build \ x64-Debug \ SDLReactGame .. \ out \ build \ x64-Debug \ MSVCRTD.lib (exe_main.obj)

1 Ответ

0 голосов
/ 09 мая 2020

Итак, я разобрался. создание исходного кода sdl2 с помощью cmake в Visual Studio дает 3 вещи: SDL2 (общая библиотека), SDL2main (stati c library) и SDL2-stati c (stati c library).

я использовал это

target_link_libraries(SDLReactGame "SDL2") 

, которое, насколько я понимаю, создает файл dll, и я должен был использовать эту

target_link_libraries(SDLReactGame "SDL2-static" "SDL2main")

, которая ссылается на две библиотеки stati c и избавляется от мои ошибки lnk.

я предполагаю, что вы не ссылаетесь на файлы dll, но, возможно, они вам понадобятся в двоичной папке, в которой вы создаете свой проект

...