Подключение статичных библиотек SFML (Network - если быть точным)
Столкнулся со следующей проблемой: я работаю в VS19 и использую библиотеки SFML для работы, до этого я ни разу не работал со статичными библиотеками, так что, не то, что бы разбираюсь в них.
Автор, добавьте уточнение, пожалуйста, что это вариант подключения по умолчанию, с динамической линковкой. В дальнейшем, для запуска приложения не в студии, а с экзешника, потребуется все файлы из папки bin класть в одну директорию с ним. Для упрощения, можно использовать статическую линковку: к вышеописанному руководству, добавляем в настройках проекта C/C++ ->Preprocessor ->Preprocessor Definitions пишем SFML_STATIC; (Для всех конфигураций). В компоновщике, где прописывали зависимости, для каждого режима (!!!) отдельно — Debug и Release, копипастим следующее:
Для релиза :
sfml-graphics-s.lib
sfml-window-s.lib
sfml-system-s.lib
sfml-audio-s.lib
opengl32.lib
winmm.lib
gdi32.lib
freetype.lib
openal32.lib
flac.lib
vorbisenc.lib
vorbisfile.lib
vorbis.lib
ogg.lib
Для дебага:
sfml-graphics-s-d.lib
sfml-window-s-d.lib
sfml-system-s-d.lib
sfml-audio-s-d.lib
opengl32.lib
winmm.lib
gdi32.lib
freetype.lib
openal32.lib
flac.lib
vorbisenc.lib
vorbisfile.lib
vorbis.lib
ogg.lib
Всё будет сжато в единый , без сбоев при запуске на других компах.
Статья откуда этот комментарий.
Использовал этот совет, чтобы сделать полноценный exe файл без необходимости в оставшейся части в виде десятка dll. Я провел некоторые тесты с использование подобных конструкций:
#include <SFML/Graphics.hpp>
int main() {sf::Window w();
return 0; }
Все прекрасно работало на релиз версии, как у меня, так и на другой машине. Единственное, я больше не экспериментировал, вероятно, в дальнейшем у меня бы возникла эта ошибка в любом случае, но так как она обнаружилась тут, я на эти строки и грешу:
Элемент кода:
#include <SFML/Window.hpp>
#include <SFML/Network.hpp>
#include <iostream>
int main(){using namespace std;
using namespace sf;
sf::TcpSocket socket;
return 0;}
Ошибка:
Настройки:
Также я решил поиграть в "дурачка" и каждой версии по очереди добавлял библиотеки с придуманным названием , схожим с тем, как называются другие из той же библиотеки, по типу: sfml-network-2-d.lib и т.д.
Понятное дело, это не помогло.
Исходя из всего, написанного выше, я понимаю, что сам вряд ли смогу разобраться.
Поэтому прошу помочь с этим вопросом.
Заранее спасибо. И спасибо, что уделили этому вопросу время :)
Ответы (2 шт):
столкнулся схожей проблемой, в общем если говорить кратко то в плане зависимостей дела обстоят следующим образом:
Делается это все под Debug x64
sfml-network-d.lib
sfml-graphics-d.lib
sfml-window-d.lib
sfml-system-d.lib
sfml-audio-d.lib
kernel32.lib
user32.lib
gdi32.lib
winspool.lib
comdlg32.lib
advapi32.lib
shell32.lib
ole32.lib
oleaut32.lib
uuid.lib
odbc32.lib
odbccp32.lib
ссылка на папки include и lib оставляем без изменений.
Также помимо этого в настройка проекта нужно указать препроцессор. В большинстве мануалов по установке SFML, предлагают выставить SFML_STATIC, но у меня выставлен SFML_DYNAMIC
Далее что не мало важно нужно зайти в папку где хранится сама SFML, зайти в папку bin, и скопировать оттуда выделенные файлы, и перекинуть в папку где находится исходники проекта

В качестве тестового примера для проверки работоспособности использовал ниже приведенный код:
#include <iostream>
#include <SFML/Network.hpp>
#include <string>
using namespace std;
static bool port_is_open(const string& address, int port)
{
return (sf::TcpSocket().connect(address, port) == sf::Socket::Done);
}
int main()
{
cout << "Port 443 : ";
if (port_is_open("stackoverflow.com", 443)) {
cout << "OPEN" << endl;
system("PAUSE");
}
else
cout << "CLOSED" << endl;
return 0;
}
Чуть не забыл, данный метод работает не только с sfml-network, но и с другими компонентами, то есть: sfml-audio, sfml-graphics, и т.д.
Прописать в предпроцессор макрос
SFML_STATICПрописать статические библиотеки ("sfml-xxx-s.lib" для релиза или "sfml-xxx-s-d.lib" для дебага)
Прописать нужные зависимости см. оф.сайт:
Список всех библиотек для Release x64:
sfml-system-s.lib
winmm.lib
sfml-window-s.lib
opengl32.lib
gdi32.lib
sfml-graphics-s.lib
freetype.lib
sfml-audio-s.lib
flac.lib
vorbisenc.lib
vorbisfile.lib
vorbis.lib
ogg.lib
sfml-network-s.lib
ws2_32.lib
Уже прописанные зависимости нарочно опущены. Так, например, для sfml-window необходима sfml-system, которая уже прописана, значит не обязательно прописывать ее еще раз.







