c++ - 针对 libx264 的链接不起作用 (Cygwin)

标签 c++ gcc g++ cygwin x264

我想在我的 Windows 项目之一中使用 libx264。我用 cygwin 编译了 x264,包括共享库和静态库。一切正常,静态库和动态库也正确安装在 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 ****

感谢您的帮助!

最佳答案

您使用的是 C++,而不是 C。x264 是一个 C 库,名称可能被破坏了。

尝试

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

--- 后面是旧建议---

为什么您要链接 aginst 'lx264.dll' 而不仅仅是 'lx264'?

此外,看起来您正在尝试链接 Microsoft .lib 文件。通常目标文件在编译器/链接器之间不是二进制兼容的...尽管在 Cygwin 上可能有所不同。根据您在下面的评论,它是不同的...所以没关系。

关于c++ - 针对 libx264 的链接不起作用 (Cygwin),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8097628/

相关文章:

c++ - #define ^ 在 C++ 中是不允许的

c++ - 如何在 centos 6 上恢复系统 gcc 编译器

c++ - MySQL 连接器/C++ PreparedStatement : forward declaration of ‘class sql::PreparedStatement’

c++ - 错误 : declaration does not declare anything

c++ - 语法错误 : "(" unexpected

c++ - 如何在 gcc/clang 中的错误和警告之间添加换行符/边界

c++ - 字符串文字中的符号\0 是什么意思?

c++ - 如何围绕我的对象旋转相机?

c++ - 在 C++ 中使用 UDP 进行多播

c++ - 我可以在处理它时保留编译器输出的格式吗?