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

C++ 针对libx264的链接不起作用(Cygwin),c++,gcc,g++,cygwin,x264,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*, cha

我想在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 ****

谢谢你的帮助

< P>你使用C++,而不是C.x264是C库,名字可能被修改。< /P> 试一试

---旧的建议接踵而至---

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


另外,看起来您正在尝试将Microsoft.lib文件链接到中。通常,对象文件在编译器/链接器之间不兼容。。。虽然在Cygwin上可能会有所不同。根据你下面的评论,这是不同的。。。不要介意。

你使用C++,而不是C.x264是C库,名字可能被修改。< /P> 试一试

---旧的建议接踵而至---

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


另外,看起来您正在尝试将Microsoft.lib文件链接到中。通常,对象文件在编译器/链接器之间不兼容。。。虽然在Cygwin上可能会有所不同。根据你下面的评论,这是不同的。。。因此,无需担心。

如果我在代码中省略了2个x264相关语句,那么应用程序的编译将非常完美。这就是为什么我认为链接MS libs在这里不是一个问题。让我们把它分解,确保它找到了库。。。如果运行
g++-lx264
,会发生什么情况?您应该看到一个“未定义的对'main'的引用”,而不是一个“找不到-lx264”。您好,Robert,如果我在代码中省略了2个依赖于x264的语句,您可以查看此链接吗?应用程序编译得非常完美。这就是为什么我认为链接MS libs在这里不是一个问题。让我们把它分解,确保它找到了库。。。如果运行
g++-lx264
,会发生什么情况?你应该看到一个“未定义的对‘main’的引用”,而不是一个“找不到-lx264”。你好,罗伯特,你能看看这个链接吗
extern "C" {
    #include "x264.h"
}