Линковка с библиотекой C++?
Лучше воспользоваться какой-либо сторонней библиотекой и проигрывать mp3, mod, it, ogg и т. д. Миди со стандартным виндовым секвенсором уж очень убого звучит. (https://otvet.mail.ru/question/82279023)
Как слинковать библиотеку и исходник и где взять библиотеку winmm.lib?
Второй пример с похожей целью проиграть музыку в консоли:
#include #include #include "MMSystem.h" using namespace std; int main()

Как вручную слинковать библиотеки с исходников в cmd? Пробовал вручную скачать либу, поместить ее в директории с файлом и с консоли [g++ -c main.cpp mmsystem.h] но выдает ошибки:

Так же подскажите пожалуйста как подключить библиотеку SFML к Qt Creator? SFML нужно использовать в проекте, я скачал ее с оф. сайта но там под отдельные компиляторы(в моем случае подходит версия для Visual C++ 15 (2017) — 64-bit)
Как теперь встроить ее в Qt чтобы в проекте можно было добавить в .pro файл и использовать?
- Вопрос задан более трёх лет назад
- 1201 просмотр
Комментировать
Решения вопроса 1
Developer, ex-admin
mmsystem.h и winmm.lib — это стандартные виндовый заголовочный файл и библиотека, предоставляется вместе с Windows SDK, который входит в состав Visual Studio. mmsystem.h в студии доступен изначально, просто используете его в #include, копировать его в свой проект не нужно. winmm.lib то же доступен, но его надо подключить к проекту — опция -lwinmm.lib компилятора или задать в свойствах проекта как дополнительную используемую библиотеку, если используете IDE. По умолчанию она не подключена.
Вообще для подключения сторонних библиотек к любому С/С++ проекту надо:
1.добавить путь где лежать заголовочные файлы библиотеки опцией -I в команду запуска компилятора.
2.добавить путь где лежат lib файлы (lib для msvc) библиотеки в опцию -L . Если библиотечный файл один, то этот пункт можно пропустить и задать полный путь в п.3. Если файлов несколько, то проще задать путь к каталогу в опции -L, а в п.3 указывать только имя конкретного файла библиотеки.
3.добавить имя файла библиотеки (lib файла) в опцию -l или полный путь к lib файлу.
Если вы собираете из IDE, то те же действия надо проделать в настройках проекта. Опции компилятора практически универсальны — те же опции (и аналогичный подход) используются в msvc, gcc, clang и других компиляторах.
По сборке библиотек с Qt проектом:
В pro файле:
переменная LIBS — задаются опции -L и -l компилятора (п.2 и п.3)
переменная INCLUDEPATH — задаются опции -I компилятора (п.1)
Например:
INCLUDEPATH += -Ipath/to/header/files LIBS += -Lpath/to/lib/files -lmylibfile
Статическая линковка libcurl в MinGW
Добрый день господа. Пытаюсь подключить libcurl.a к проекту в Code::Blocks MinGW. Скинул заголовки в include и .a файл в lib, прописываю линк, #define и параметр -static но ничего не происходит, как была ошибка мол curl_easy_init() не найдено, так и есть. Так вот, есть ли где-нибудь подробная инструкция подключения именно статических библиотек к проекту Си.
Отслеживать
9,052 2 2 золотых знака 19 19 серебряных знаков 34 34 бронзовых знака
задан 19 окт 2016 в 5:16
597 3 3 серебряных знака 21 21 бронзовый знак
Залинкуйте его через саму среду. stackoverflow.com/questions/5862757/…
19 окт 2016 в 5:27
Так беда в том, что я так и делаю. Вот скрин — pp.vk.me/c637821/v637821670/10747/dFvgb5SKj7E.jpg
19 окт 2016 в 5:43
Можете попробовать запустить свою программу и заскринить (через PrintScreen) место вывода ошибок?
19 окт 2016 в 6:09
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Особенность подключения статических библиотек состоит в том, чтобы, помимо подключения самой библиотеки, подключить и все её зависимости, которые, в свою очередь, можно подключать как статические библиотеки, так и как dll.
Что касается именно libcurl , то в зависимости от опций, с которыми она была скомпилирована, эта библиотека может зависеть от целой кучи сторонних библиотек (помимо системных).
Как я уже рекомендовал тут, собранную libcurl и её зависимости можно найти вот в этом репозитории: https://bintray.com/vszakats/generic
Для статической линковки этой версии curl понадобятся ещё 3 библиотеки из того репозитория: libssh2 , nghttp2 , openssl . Так же, для сборки понадобится zlib . Для сборки всех библиотек используется MinGW-w64 версии 6.2.0, которая в своём составе имеет и zlib , так что рекомендую взять эту же версию.
Чтобы проект в Code::Blocks был переносимым, указанные библиотеки и их заголовочники лучше всего копировать не в директорию MinGW, а куда-то в пределах папки с проектом (например, в папки lib и include ).
Далее, надо открыть настройки проекта Project — Build options и прописать:
- на вкладке Compiler settings — #defines : CURL_STATICLIB
- на вкладке Search Directories — Compiler : include — относительный/абсолютный путь к заголовочникам ( .h ) библиотек
- на вкладке Search Directories — Linker : lib — относительный/абсолютный путь к либам ( .a файлам) библиотек
- на вкладке Linker settings — Link libraries : curl , ssl , crypto , ssh2 , nghttp2 , z , ws2_32 , winmm , wldap32 , crypt32 — линкуемые библиотеки. Тут очень важно соблюдать порядок, в котором библиотеки будут линковаться!
Вот, собственно, и всё, можно собирать:
gcc.exe -Wall -O2 -DCURL_STATICLIB -std=c99 -m32 --static -static-libgcc -Iinclude -IC:\dev\mingw-w64\mingw32\i686-w64-mingw32\include -c B:\cb_curl_static\main.c -o obj\Release\main.o gcc.exe -Llib -LC:\dev\mingw-w64\mingw32\i686-w64-mingw32\lib -o bin\Release\cb_curl_static.exe obj\Release\main.o -s -m32 --static -static-libgcc -lcurl -lssl -lcrypto -lssh2 -lnghttp2 -lz -lws2_32 -lwinmm -lwldap32 -lcrypt32 Output file is bin\Release\cb_curl_static.exe with size 2.68 MB
В итоге, получился довольно большой exe файл, но он зависит только от системных библиотек.
Непонятная ошибка компилятора при использовании timeGetTime(); в C++ (VS 2003)
При подключении mmsystem.h и использовании функции timeGetTime(); всегда выдается ошибка:
test.obj : error LNK2019: unresolved external symbol __imp__timeGetTime@0 referenced in function «bool __cdecl Initialization(struct HWND__ *)» (?Initialization@@YA_NPAUHWND__@@@Z)
Порядок инклуда у меня такой:
Подскажите в чем проблема?
#1
16:48, 4 мар 2009
надо подключить библиотеку Winmm.lib
#2
17:04, 4 мар 2009
randomx
Спасибо большое, а то можно сказать почти бился лбом об стену ища причину ошибки, а все оказывается так просто =)
#3
18:28, 4 мар 2009
Heb
зачем тебе эта функция? используй clock() — во первых она легче по вызову во вторых ANSI C.
#4
21:52, 4 мар 2009
Что-то в последнее время участились вопросы про ошибку LNK2019 — причем ответ был везде один и тот же — не подключенная библиотека. Народ — смотрите MSDN прежде чем плодить похожие темы пожалуйста
#5
22:08, 4 мар 2009
Andrey
Мне эта функция нужна для вычисления дельта тайм при рендеринге, а про clock() я не знал, можно чуть подробнее про нее?
#6
22:17, 4 мар 2009
Вообще было бы интересно узнать какую функцию лучше всего использовать для вычисления времени?
Многие ругаются на timeGetTime() из-за не точности, но лично меня она никогда не подводила.
Слышал про разные замены этой функции. Уже как минимум, кажется, 3 варианта.
Что же оптимальнее всего использовать?
#7
22:20, 4 мар 2009
Я всегда использую QueryPerformanceCounter
#8
23:01, 4 мар 2009
В DXUT, кстати, тоже. Это не показатель конечно, но что-то мне подсказывает, что все на QPC в конце концов переходят.
#9
11:10, 5 мар 2009
народ! не начинайте заново! юзайте поиск. тема с вычислением времени с максимальной точностью поднималась несколько раз. перечитайте старые темы.
#10
19:15, 5 мар 2009
alex-r
точность у нее 1 / QueryPerformanceFrequency секунд
#11
22:11, 5 мар 2009
d.m.k
Да, конечно, неправильно выразился 🙂
#12
22:50, 5 мар 2009
pentagra
можно вопрос? если еще раз поделятся опытом старожилы со младенцами, типа меня, то разве накроется форум от переизбытка информации? если не хочешь — не отвечай. тебя за язык никто не тянет!
. искренне извиняюсь
#13
23:00, 5 мар 2009
4mlr
>pentagra
>можно вопрос? если еще раз поделятся опытом старожилы со младенцами, типа меня,
>то разве накроется форум от переизбытка информации? если не хочешь — не
>отвечай. тебя за язык никто не тянет!
>. искренне извиняюсь
Таких тем просто десятки всплывают каждую неделю.
Запаришься каждому персонально рассказывать.
#14
23:19, 5 мар 2009
Heb
просто вызывай ее вместо timeGetTime();
#include . clock_t t = clock();
ну а для более точного конечно Win32 QueryPerformanceCounter про него и про clock() — MSDN.
Winmm lib как подключить
Регистрация: 16.04.2011
Сообщений: 126
Проблема с библиотекой winmm.lib
Подключил библиотеку в проект, но все равно при компиляции выскакивает ошибка со ссылкой на неразрешенный символ. Кричит именно на функции waveInGetNumDevs, waveOutGetNumDevs, waveInGetDevCaps, waveOutGetDevCaps.
Microsoft Visual Studio 2010
Задача программы, получение всех звуковых устройств.
#include #include #include #include #include #include #include #pragma comment(lib, "winmm.lib") struct device < char name[30]; int id; char support[50]; >; void GetInputDevices(); void GetOutputDevices(); using std::list; list devices; void main() < printf("Recording Devices\n"); GetInputDevices(); printf("PlayBack Devices\n"); GetOutputDevices(); system("pause"); >void GetInputDevices() < int waveInDevicesCount = waveInGetNumDevs(); if (waveInDevicesCount >0) < for (int i = 0; i < waveInDevicesCount; i++) < LPWAVEINCAPS waveInCaps; waveInGetDevCaps(i,waveInCaps,sizeof(waveInCaps)); device info; strcpy(info.name,waveInCaps->szPname); printf("%s",waveInCaps->szPname); sprintf(info.support,"%s",waveInCaps->dwFormats); printf("%s",waveInCaps->dwFormats); info.id = i; devices.push_back(info); > > > void GetOutputDevices() < int waveOutDevicesCount = waveOutGetNumDevs(); if (waveOutDevicesCount >0) < for (int i = 0; i < waveOutDevicesCount; i++) < LPWAVEOUTCAPS waveOutCaps; waveOutGetDevCapsA(i,waveOutCaps,sizeof(waveOutCaps)); device info; strcpy(info.name,waveOutCaps->szPname); printf("%s",waveOutCaps->szPname); sprintf(info.support,"%s",waveOutCaps->dwFormats); printf("%s",waveOutCaps->dwFormats); info.id = i; devices.push_back(info); > > >
Помогите, пожалуйста.