2014-08-29 54 views
0

我不知道問題出在哪裏。我正在嘗試構建我的項目,但鏈接器抱怨沒有找到外部符號。LNK1120,LNK2001,LNK2019 - 找不到原因

這是奇怪的事情是,我複製粘貼&所有包括來自調試路徑和依賴關係到發佈構建配置和雙重檢查它。

get_PC_definition()是例如在cpudefs.h聲明:

/* Return register definition of instruction pointer */ 
extern RegisterDefinition * get_PC_definition(Context * ctx); 

有此功能的幾個實現 - 我選擇了由宏controled其中之一,所以,是的,我定義的所有必要的宏太:

RegisterDefinition * get_PC_definition(Context * ctx) { 
    static RegisterDefinition * reg_def = NULL; 

    if (!context_has_state(ctx)) 
     return NULL; 

    // and so on .. 

    return reg_def; 
} 

cpudefs.obj得到建立至今但鏈接器只是嘲笑。也許我已經對錯誤視而不見,但就像我說的,我將配置從調試複製到版本構建配置。

任何想法我可以嘗試嗎?

錯誤輸出:

Error 43 error LNK1120: 9 unresolved externals C:\svn\AgentSib\Release\agentsib.exe agentsib 
Error 31 error LNK2001: unresolved external symbol _get_PC_definition C:\svn\AgentSib\AgentSib\registers.obj agentsib 
Error 32 error LNK2001: unresolved external symbol _get_PC_definition C:\svn\AgentSib\AgentSib\runctrl.obj agentsib 
Error 34 error LNK2001: unresolved external symbol _get_PC_definition C:\svn\AgentSib\AgentSib\symbols_cdb.obj agentsib 
Error 35 error LNK2001: unresolved external symbol _get_PC_definition C:\svn\AgentSib\AgentSib\cpudefs.obj agentsib 
Error 36 error LNK2001: unresolved external symbol _get_PC_definition C:\svn\AgentSib\AgentSib\expressions.obj agentsib 
Error 37 error LNK2001: unresolved external symbol _get_PC_definition C:\svn\AgentSib\AgentSib\funccall.obj agentsib 
Error 38 error LNK2001: unresolved external symbol _get_PC_definition C:\svn\AgentSib\AgentSib\profiler_sst.obj agentsib 
Error 41 error LNK2019: unresolved external symbol _BREAK_INST referenced in function _get_break_instruction C:\svn\AgentSib\AgentSib\cpudefs.obj agentsib 
Error 27 error LNK2019: unresolved external symbol _cpu_bp_get_capabilities referenced in function _context_get_supported_bp_access_types C:\svn\AgentSib\AgentSib\context-sib.obj agentsib 
Error 30 error LNK2019: unresolved external symbol _cpu_bp_on_resume referenced in function _sib_resume C:\svn\AgentSib\AgentSib\context-sib.obj agentsib 
Error 28 error LNK2019: unresolved external symbol _cpu_bp_plant referenced in function _context_plant_breakpoint C:\svn\AgentSib\AgentSib\context-sib.obj agentsib 
Error 29 error LNK2019: unresolved external symbol _cpu_bp_remove referenced in function _context_unplant_breakpoint C:\svn\AgentSib\AgentSib\context-sib.obj agentsib 
Error 42 error LNK2019: unresolved external symbol _crawl_stack_frame referenced in function _trace_stack C:\svn\AgentSib\AgentSib\stacktrace.obj agentsib 
Error 33 error LNK2019: unresolved external symbol _get_PC_definition referenced in function _command_get_children_cache_client C:\svn\AgentSib\AgentSib\stacktrace.obj agentsib 
Error 39 error LNK2019: unresolved external symbol _ini_cpudefs_mdep referenced in function _ini_cpudefs C:\svn\AgentSib\AgentSib\cpudefs.obj agentsib 
Error 40 error LNK2019: unresolved external symbol _regs_index referenced in function _get_reg_by_dwarf_id C:\svn\AgentSib\AgentSib\cpudefs.obj agentsib 

編輯:

調用函數get_PC_definition()

static int set_debug_regs(Context * ctx, int check_ip, int * step_over_hw_bp) { 
    int i; 
    int ret; 
    uint32_t dr7  = 0; 
    ContextAddress ip = 0; 
    ContextExtensioni8051 * dext = EXT(ctx); 
    ContextExtensioni8051 * bps = EXT(context_get_group(ctx, CONTEXT_GROUP_BREAKPOINT)); 
    RegisterDefinition *reg_def = NULL; 

    ret = 0; 

    if (check_ip) { 

     *step_over_hw_bp = 0; 

     reg_def = get_PC_definition(ctx); 
     ret  = context_read_reg(ctx, reg_def, 0, reg_def->size, &ip); 

     if (ret < 0) 
      return -1; 
    } 

    return 0; 
} 
+0

顯示其餘的代碼(或至少是其中的相關部分,您在哪裏調用此函數)。在你的問題中給出的代碼不會產生這種鏈接錯誤,因爲「沒有理由讓鏈接器嘗試將此函數鏈接到任何東西」。 – 2014-08-29 12:46:28

+0

@barakmanos我能做到這一點,但因爲整部片子編譯毫不猶豫地,我不認爲這會給我們很多信息。 – displayname 2014-08-29 12:47:38

+0

順便說一句,那個大的灰色塊(在「我也定義了所有必要的宏」下面)對我來說看起來不像一個宏。 – 2014-08-29 12:48:18

回答

0

這個問題 「Visual Studio 2010's strange "warning LNK4042"」 有解決我的問題。

所有它是引起編譯器連接問題後..

Configuratoin Properties >> C/C++ >> Output Files >> Object File Name我用配置$(IntDir),而它的工作對調試而不是發佈。有人知道爲什麼嗎?

將其更改爲

$(IntDir)\%(RelativeDir) 

,才救了我一天的解決方案。