c - LNK1120、LNK2001、LNK2019 - 无法追踪原因

标签 c visual-studio-2012 linker

我不知道问题是什么。我正在尝试构建要发布的项目,但链接器提示找不到外部符号。

奇怪的是,我将所有包含路径和依赖项从调试复制并粘贴到发布构建配置中,并仔细检查它。

get_PC_definition()例如在 cpudefs.h 中声明:

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

此函数有几种实现 - 我选择的是由宏控制的,所以是的,我也定义了所有必要的宏:

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;
}

最佳答案

这个问题“Visual Studio 2010's strange "warning LNK4042"”解决了我的问题。

毕竟这是编译器引起的链接器问题..

配置属性>> C/C++>>输出文件>>对象文件名下,我用于两者配置$(IntDir)而它适用于调试,但不适用于发布。有谁知道为什么吗?

更改为

$(IntDir)\%(RelativeDir)

这个解决方案拯救了我的一天。

关于c - LNK1120、LNK2001、LNK2019 - 无法追踪原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25568540/

相关文章:

c - 为什么我的循环会创建额外的链表节点?

c - 将指针传递给字符串,不兼容的指针类型

c - 当放入c中的数组时,字符串会变形

c++ - 当我单击窗口时 OpenGL 崩溃并且我的动画没有按预期工作

visual-studio - 查找结果不显示结果

c - ARM 裸机二进制链接

c - 创建指向 char 指针的笛卡尔积的困难

c++ - 如何在 Windows 窗体项目中创建 VTK 项目 (VisualC++ 2012)

c - 使用 openssl 时链接器错误

c++ - 关于 C++ 中名称重整的问题