C++ 在体系结构x86_64中找不到符号clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)

C++ 在体系结构x86_64中找不到符号clang:错误:链接器命令失败,退出代码为1(使用-v查看调用),c++,macos,C++,Macos,我得到了这个“架构x86_64中找不到的符号:错误:链接器命令失败,退出代码为1(使用-v查看调用)。”实际上,这些消息直到我升级到macOS Mojave后才出现 我得到的完整信息是: g++-Wall-feexceptions-g-c/Users/suraj/Desktop/sfm/main.cpp-o obj/Debug/main.o g++-o bin/Debug/sfm obj/Debug/main.o 架构x86_64的未定义符号: “sf::CircleShape::CircleS

我得到了这个“架构x86_64中找不到的符号:错误:链接器命令失败,退出代码为1(使用-v查看调用)。”实际上,这些消息直到我升级到macOS Mojave后才出现

我得到的完整信息是:

g++-Wall-feexceptions-g-c/Users/suraj/Desktop/sfm/main.cpp-o obj/Debug/main.o
g++-o bin/Debug/sfm obj/Debug/main.o
架构x86_64的未定义符号:
“sf::CircleShape::CircleShape(浮点,无符号长)”引用自:
_主音中的主音
“sf::RenderStates::Default”,引用自:
_主音中的主音
“sf::RenderTarget::draw(sf::Drawable常量&,sf::RenderStates常量&)”,
引用自:
_主音中的主音
“sf::RenderTarget::clear(sf::Color const&)”,引用自:
_主音中的主音
“sf::RenderWindow::RenderWindow(sf::VideoMode,sf::String const&,”,
unsigned int,sf::ContextSettings const&“,引用自:
_主音中的主音
“sf::RenderWindow::~RenderWindow()”,引用自:
_主音中的主音
“sf::Color::Green”,引用自:
_主音中的主音
“sf::Color::Color(无符号字符、无符号字符、无符号字符、无符号字符
char)”,引用自:
_主音中的主音
“sf::Shape::setFillColor(sf::Color const&)”,引用自:
_主音中的主音
“sf::Shape::~Shape()”,引用自:
sf::CircleShape::~CircleShape()位于main.o中
“sf::String::String(char const*,std::u 1::locale const&)”,引用
发件人:
_主音中的主音
“sf::Window::close()”,引用自:
_主音中的主音
“sf::Window::display()”,引用自:
_主音中的主音
“sf::Window::pollEvent(sf::Event&)”,引用自:
_主音中的主音
“sf::VideoMode::VideoMode(无符号整数、无符号整数、无符号整数)”,
引用自:
_主音中的主音
“sf::Window::isOpen()常量”,引用自:
_主音中的主音
ld:找不到架构x86_64的符号
叮当声:错误:链接器命令失败,退出代码为1(使用-v查看调用)
代码是:

#include <SFML/Graphics.hpp>

int main()
{
sf::RenderWindow window(sf::VideoMode(400, 200), "SFML works!");
sf::CircleShape shape(100.f);
shape.setFillColor(sf::Color::Green);

while (window.isOpen())
{
    sf::Event event;
    while (window.pollEvent(event))
    {
        if (event.type == sf::Event::Closed)
            window.close();
    }

    window.clear();
    window.draw(shape);
    window.display();
}

return 0;
}
#包括
int main()
{
sf::RenderWindow窗口(sf::VideoMode(400200),“SFML工作!”;
sf:圆形(100.f);
setFillColor(sf::Color::Green);
while(window.isOpen())
{
sf::事件;
while(window.pollEvent(事件))
{
如果(event.type==sf::event::Closed)
window.close();
}
window.clear();
窗口。绘制(形状);
window.display();
}
返回0;
}

请提供帮助。

更新答案-2019年5月

似乎
openal
软件包不再在自制中,这导致下面的指令失败。我不知道背后的背景。这是另一种方法

您可以找到
sfml的所有
pkg config
相关部分,如下所示:

find /usr/local/Cellar/sfml -name \*pc

/usr/local/Cellar/sfml/2.5.1/lib/pkgconfig/sfml-network.pc
/usr/local/Cellar/sfml/2.5.1/lib/pkgconfig/sfml-all.pc
/usr/local/Cellar/sfml/2.5.1/lib/pkgconfig/sfml-graphics.pc
/usr/local/Cellar/sfml/2.5.1/lib/pkgconfig/sfml-audio.pc
/usr/local/Cellar/sfml/2.5.1/lib/pkgconfig/sfml-system.pc
/usr/local/Cellar/sfml/2.5.1/lib/pkgconfig/sfml-window.pc
brew install pkg-config
在上面的列表中,您似乎无法使用
sfml all
sfml audio
,因此您需要选择要使用的部件并分别抓取它们,因此如果您想要
图形
窗口
系统

pkg-config --libs --cflags sfml-graphics
-I/usr/local/Cellar/sfml/2.5.1/include 
-I/usr/local/opt/freetype/include/freetype2 
-I/usr/local/Cellar/sfml/2.5.1/include 
-L/usr/local/Cellar/sfml/2.5.1/lib -lsfml-graphics -lsfml-window -lsfml-system

pkg-config --libs --cflags sfml-system
-I/usr/local/Cellar/sfml/2.5.1/include 
-L/usr/local/Cellar/sfml/2.5.1/lib -lsfml-system

pkg-config --libs --cflags sfml-window
-I/usr/local/Cellar/sfml/2.5.1/include
-L/usr/local/Cellar/sfml/2.5.1/lib -lsfml-window -lsfml-system
因此,您可以使用以下工具进行编译:

g++ main.cpp $(pkg-config --libs --cflags sfml-window sfml-system sfml-graphics) -o main
pkg-config --libs --cflags sfml-all
g++ main.cpp $(pkg-config --libs --cflags sfml-all) -o main
原始答案

如果您通过自制安装了sfml,我建议您也这样安装
pkg config

find /usr/local/Cellar/sfml -name \*pc

/usr/local/Cellar/sfml/2.5.1/lib/pkgconfig/sfml-network.pc
/usr/local/Cellar/sfml/2.5.1/lib/pkgconfig/sfml-all.pc
/usr/local/Cellar/sfml/2.5.1/lib/pkgconfig/sfml-graphics.pc
/usr/local/Cellar/sfml/2.5.1/lib/pkgconfig/sfml-audio.pc
/usr/local/Cellar/sfml/2.5.1/lib/pkgconfig/sfml-system.pc
/usr/local/Cellar/sfml/2.5.1/lib/pkgconfig/sfml-window.pc
brew install pkg-config
然后,您可以获得编译所需的开关:

g++ main.cpp $(pkg-config --libs --cflags sfml-window sfml-system sfml-graphics) -o main
pkg-config --libs --cflags sfml-all
g++ main.cpp $(pkg-config --libs --cflags sfml-all) -o main
样本输出

-I/usr/local/Cellar/sfml/2.4.2_1/include -L/usr/local/Cellar/sfml/2.4.2_1/lib -lsfml-graphics -lsfml-window -lsfml-audio -lsfml-network -lsfml-system
因此,您可以使用以下工具进行编译:

g++ main.cpp $(pkg-config --libs --cflags sfml-window sfml-system sfml-graphics) -o main
pkg-config --libs --cflags sfml-all
g++ main.cpp $(pkg-config --libs --cflags sfml-all) -o main

实际错误消息的可能副本将准确地告诉您(并且通常带有残酷、令人心碎的细节,一页又一页地进行下去)丢失了什么。我们需要看到实际的错误消息(或前几个条目,至少应该在页面和页面上继续),以便能够为您提供很多帮助。我现在已经发布了完整的消息。谢谢。它还包括更有用的构建命令。在
g++-o bin/Debug/sfm obj/Debug/main.o
中,还应该有一个
-L
-lsfml图形
,一个
-lsfml窗口
,可能还有一个
-lsfml系统
。遗憾的是,我不知道您正在使用什么构建工具,因此我无法推荐如何最好地添加它们。我没有Mad Mac技能,但可能会有所帮助。这些命令对我都不起作用,有其他解决方案吗?@EddyEkofo我又看了一眼,更新了我的答案。如果这不起作用,请打开一个新问题(问题是免费的)以及所有诊断和错误消息,并在此处添加一条注释链接到它-通过单击新问题下的
共享
并复制链接获取链接。这是Qs:[]。任何帮助都将不胜感激。