2013-11-02 586 views
0

我正在構建使用x264作爲靜態庫的自定義視頻編碼器。我遵循this指南來建立靜態庫。試圖編譯此:無法與libx264.lib靜態庫鏈接

x264_t * setup_encoder(int width, int height){ 
    x264_param_t param; 
    x264_param_default_preset(&param, "veryfast", "zerolatency"); 
    param.i_threads = 1; 
    param.i_width = width; 
    param.i_height = height; 
    param.i_fps_num = 26; 
    param.i_fps_den = 1; 
    // Intra refres: 
    param.i_keyint_max = 26; 
    param.b_intra_refresh = 1; 
    //Rate control: 
    param.rc.i_rc_method = X264_RC_CRF; 
    param.rc.f_rf_constant = 25; 
    param.rc.f_rf_constant = 25; 
    param.rc.f_rf_constant_max = 35; 
    //For streaming: 
    param.b_repeat_headers = 1; 
    param.b_annexb = 1; 
    x264_param_apply_profile(&param, "baseline"); 

    return x264_encoder_open(&param); 
} 

結果:

main.obj:錯誤LNK2019:解析外部符號 「INT __cdecl x264_param_default_preset(結構x264_param_t *,字符常量*,字符常量*)」

main.obj:錯誤LNK2019:解析外部符號 「INT __cdecl x264_param_apply_profile(結構x264_param_t *,字符常量*)」

main.obj:錯誤LNK2019:解析的外部符號「ST構作x264_t * __cdecl x264_encoder_open_136(結構x264_param_t *)」

%PROJECT_DIR%:致命錯誤LNK1120:3無法解析的外部

鏈接掃描libx264.lib,但無法找到裏面的任何東西。

Searching .\lib\libx264.lib: 

隨着dumpbin/HEADERS我實際上可以找到我需要的聲明,但鏈接器無法做到這一點。

SECTION HEADER #38 
    .text name 
     0 physical address 
     0 virtual address 
    E60 size of raw data 
    930C file pointer to raw data (0000930C to 0000A16B) 
    D219 file pointer to relocation table 
     0 file pointer to line numbers 
     40 number of relocations 
     0 number of line numbers 
60501020 flags 
     Code 
     COMDAT; sym= x264_param_default_preset 
     16 byte align 
     Execute Read 

環境是Visual Studio 2012與Windows 8 64位上的英特爾編譯器14。

回答

2

嘗試使用包括使用C風格的綁定。

extern "C" { 
#include <x264.h> 
} 
+0

獲取多個函數的多個定義(在libcmt.lib中),所以無法連接。你的代碼是如何工作的? –

+0

http://en.wikipedia.org/wiki/Name_mangling – szatmary