символ (ы) не найден в архитектуре x86_64 clang: error: сбой команды компоновщика с кодом выхода 1 (используйте -v для просмотра вызова) - PullRequest
0 голосов
/ 28 ноября 2018

Я получаю это "символ (ы) не найден в архитектуре x86_64 clang: error: сбой команды компоновщика с кодом выхода 1 (используйте -v для просмотра вызова)."На самом деле эти сообщения не появлялись до тех пор, пока я не обновил MacOS Mojave.

Я получил полное сообщение:

g++ -Wall -fexceptions -g  -c /Users/suraj/Desktop/sfm/main.cpp -o obj/Debug/main.o
g++  -o bin/Debug/sfm obj/Debug/main.o   
Undefined symbols for architecture x86_64:
"sf::CircleShape::CircleShape(float, unsigned long)", referenced from:
  _main in main.o
"sf::RenderStates::Default", referenced from:
  _main in main.o
"sf::RenderTarget::draw(sf::Drawable const&, sf::RenderStates const&)", 
referenced from:
  _main in main.o
"sf::RenderTarget::clear(sf::Color const&)", referenced from:
  _main in main.o
"sf::RenderWindow::RenderWindow(sf::VideoMode, sf::String const&, 
 unsigned int, sf::ContextSettings const&)", referenced from:
  _main in main.o
"sf::RenderWindow::~RenderWindow()", referenced from:
  _main in main.o
"sf::Color::Green", referenced from:
  _main in main.o
"sf::Color::Color(unsigned char, unsigned char, unsigned char, unsigned 
char)", referenced from:
  _main in main.o
"sf::Shape::setFillColor(sf::Color const&)", referenced from:
  _main in main.o
"sf::Shape::~Shape()", referenced from:
  sf::CircleShape::~CircleShape() in main.o
"sf::String::String(char const*, std::__1::locale const&)", referenced 
from:
  _main in main.o
"sf::Window::close()", referenced from:
  _main in main.o
"sf::Window::display()", referenced from:
  _main in main.o
"sf::Window::pollEvent(sf::Event&)", referenced from:
  _main in main.o
"sf::VideoMode::VideoMode(unsigned int, unsigned int, unsigned int)", 
referenced from:
  _main in main.o
"sf::Window::isOpen() const", referenced from:
  _main in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Код:

#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;
}

Пожалуйста, помогите.

1 Ответ

0 голосов
/ 28 ноября 2018

Обновленный ответ - май 2019

Кажется, что пакет openal больше не находится в homebrew , и это приводит к сбою приведенных ниже инструкций.Я не знаю фон за этим.Вот другой подход.

Вы можете найти все pkg-config связанные части sfml следующим образом:

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

Кажется, вы не можете использовать sfml-all или sfml-audio вПриведенный выше список, так что вам нужно будет выбрать, какие части вы хотите использовать, и захватить их по отдельности, так что если вы хотите graphics, window и system:

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

Оригинальный ответ

Если вы установили sfml через homebrew , я бы предложил вам такжеустановить pkg-config следующим образом:

brew install pkg-config

Затем вы можете получить параметры, необходимые для компиляции:

pkg-config --libs --cflags sfml-all

Пример вывода

-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-all) -o main
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...