Связывание с libx264 не работает (Cygwin)

Я хочу использовать libx264 в одном из своих проектов на Windows. Я скомпилировал x264 с помощью cygwin, включая разделяемую и статическую библиотеки. Все работает нормально, также в cygwin правильно установлены статические и динамические библиотеки.

При попытке скомпилировать другой проект, использующий libx264 (gcc... -lx264), я получаю сообщение об ошибке:

/cygdrive/c/Users/Erik/workspace/test/Debug/../main.cpp:406: undefined reference to `x264_param_default_preset(x264_param_t*, char const*, char const*)'
/cygdrive/c/Users/Erik/workspace/test/Debug/../main.cpp:425: undefined reference to `x264_param_apply_profile(x264_param_t*, char const*)'

У компоновщика, кажется, есть проблема с моими встроенными библиотеками libx264, но что именно здесь не так? Как я могу правильно связать x264?

Полный вывод сборки выглядит так:

Сборка конфигурации Отладка для тестового проекта**

make all 
Building target: test.exe
Invoking: Cygwin C++ Linker
g++ -L"/cygdrive/c/Program Files (x86)/Microsoft SDKs/Windows/v7.0A/Lib" -L"/cygdrive/c/Program Files (x86)/Microsoft DirectX SDK (June 2010)/Lib/x86" -L/usr/local/lib -o "test.exe"  ./main.o   -lx264.dll -lKernel32 -lUser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -ld3dx9d -ld3d9 -loleaut32 -luuid -lm
./main.o: In function `_Z8InitX264ii':
/cygdrive/c/Users/Erik/workspace/test/Debug/../main.cpp:406: undefined reference to `x264_param_default_preset(x264_param_t*, char const*, char const*)'
/cygdrive/c/Users/Erik/workspace/test/Debug/../main.cpp:425: undefined reference to `x264_param_apply_profile(x264_param_t*, char const*)'
collect2: ld returned 1 exit status
make: *** [test.exe] Error 1

**** Build Finished ****

Спасибо за вашу помощь!


person Erik    schedule 11.11.2011    source источник


Ответы (1)


Вы используете C++, а не C. x264 - это библиотека C, имена, вероятно, искажаются.

Пытаться

extern "C" {
    #include "x264.h"
}

--- старые предложения следуют ---

Почему вы ссылаетесь на «lx264.dll», а не только на «lx264»?

Кроме того, похоже, что вы пытаетесь связать файлы Microsoft .lib. Обычно объектные файлы не являются двоично-совместимыми между компиляторами/компоновщиками... хотя в Cygwin это может быть иначе. И согласно вашему комментарию ниже, это другое ... так что неважно.

person Robert    schedule 11.11.2011
comment
Если я пропущу 2 зависимых оператора x264 в своем коде, приложение отлично скомпилируется. Вот почему я думаю, что связывание библиотек MS здесь не проблема. - person Erik; 11.11.2011
comment
Давайте разберем его и убедимся, что он находит библиотеку... Что произойдет, если вы запустите g++ -lx264? Вы должны увидеть неопределенную ссылку на «main», а не «не могу найти -lx264». - person Robert; 11.11.2011
comment
привет, Роберт, можешь посмотреть эту ссылку stackoverflow.com/questions/9288334/ - person Sureshkumar Menon; 18.02.2012