【问题标题】:SDL2 not being built on VS codeSDL2 不是基于 VS 代码构建的
【发布时间】:2020-05-30 13:43:41
【问题描述】:

我想在 ma​​cOS 上使用 SDL2 库制作游戏。我已按照安装说明将 SDL2.framework 目录添加到 /Library/Frameworks。但是,我无法使用 VS 代码构建我的代码,代码如下:

#include <SDL.h>
#include <iostream>

using namespace std;

int main(int argc, char *argv[]) {
  if (SDL_Init(SDL_INIT_EVERYTHING) < 0)
    cout << "not working" << endl;
  else
    cout << "working" << endl;
  return 0;
}

这是我在构建它时遇到的错误:

ld: warning: directory not found for option '-F /Library/Frameworks -framework SDL2'
Undefined symbols for architecture x86_64:
  "_SDL_Init", referenced from:
      _main in test-f9f99c.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
The terminal process terminated with exit code: 1

这是我的tasks.json:

{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "shell",
            "label": "shell: g++ build active file",
            "command": "/usr/bin/g++",
            "args": [
                "-g",
                "${file}",
                "-F/Library/Frameworks -framework SDL2",
                "-I/Library/Frameworks/SDL2.framework/Versions/A/Headers",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}.exe",
            ],
            "options": {
                "cwd": "/usr/bin"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": "build"
        },
    ]
}

我已经回答了类似问题的多个答案,但无法解决这个问题。

这个问题的奇怪之处在于代码在终端上运行良好。 这是命令:g++ test.cpp -I/Library/Frameworks/SDL2.framework/Versions/A/Headers -framework SDL2 -F/Library/Frameworks -o test &amp;&amp; "/Users/shrishshankar/Desktop/Projects/Space_Invaders/"test (文件名为 test.cpp)

【问题讨论】:

  • 我认为您的问题在这里:"-F/Library/Frameworks -framework SDL2", 我认为您需要将其分成 2 个参数而不是 1 个。"-F/Library/Frameworks", "-framework SDL2",
  • @drescherjm 我试过了,但后来我明白了,错误:未知参数:'-framework SDL2'
  • @drescherjm 可能-framework SDL2 也应该分开。
  • @HolyBlackCat 非常感谢!它现在正在工作。我一直在这几个小时,终于解决了。
  • IDE 似乎引用了单个参数,因此 "-F/Library/Frameworks -framework SDL2", 表示使用名为 /Library/Frameworks -framework SDL2 的文件夹作为 -F 的一部分,而不是按空格将其拆分为 3 个单独的参数

标签: c++ macos visual-studio-code linker-errors sdl-2


【解决方案1】:

用于在 Visual Code 上安装 SDL2 或其他库。请按照以下步骤操作。

首先,确保您的工作区具有这样的结构。

├── bin
├── include
├── lib
├── Makefile
└── src

确保将相应的文件粘贴到 includelib

如果您使用 brew 安装 SDL2,则必须复制以下内容:

/usr/local/Cellar/sdl2/2.0.5/include/include

/usr/local/Cellar/sdl2/2.0.5/lib/lib

接下来,使用以下代码创建一个 Makefile 并添加相应的库。

CXX       := g++
CXX_FLAGS := -std=c++2a -ggdb

BIN     := bin
SRC     := src
INCLUDE_PATHS := include
LIBRARY_PATHS = lib

LIBRARIES   := -lSDL2 -lSDL2_image  #Don't forget that -l is the option
EXECUTABLE  := main

.PHONY: clean all

all: $(BIN)/$(EXECUTABLE)

run: clean all
    
    ./$(BIN)/$(EXECUTABLE)

$(BIN)/$(EXECUTABLE): $(SRC)/*.cpp
    $(CXX) $(CXX_FLAGS) $^ -o $@ -I$(INCLUDE_PATHS) -L$(LIBRARY_PATHS) $(LIBRARIES)

#   Basically this is what we are doing.
#   g++ src/main.cpp -o main -Iinclude -Llib -lSDL2-2.0.0

clean:
    -rm $(BIN)/*

其实你可以直接运行make就可以了,不过为了简单起见,你可以像这样创建一个task.json文件,然后用cmd + shift + b快捷方式运行它:

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "build",
            "type": "shell",
            "command": "make run",
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "problemMatcher": "$gcc"
        }
    ]
}

这里的调试是launch.json

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(lldb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/bin/main",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "lldb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "build"
        }
    ]
}

那一定能解决问题。

如果您在显示窗口时遇到问题,我告诉您helped me.

参考资料:

https://medium.com/@edkins.sarah/set-up-sdl2-on-your-mac-without-xcode-6b0c33b723f7

https://dev.to/talhabalaj/setup-visual-studio-code-for-multi-file-c-projects-1jpi

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-29
    • 1970-01-01
    • 1970-01-01
    • 2018-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-26
    相关资源
    最近更新 更多