繁体   English   中英

即使链接器位于静态库中,它也无法找到它们

[英]Linker can't find functions even if they are in a static lib

我有一个静态库,编译,看起来(简化)像这样:

math_util.h:

void foo(...);

math_util.cpp:

void foo(...) { ... }

A.cpp:

#include "math_util.h"
class A 
{
    bar() {
        foo(...);
    }
}

静态lib编译得很好。 但是,当我想在真实的应用程序中使用A时,我得到:

undefined reference to `foo(...)' 

但是当我用nm检查我的静态库时:

math_util.o:
                 U _GLOBAL_OFFSET_TABLE_
000000000000010a T _ZN8fooEPA2_dPdj

这不是一个原型问题,因为如果我将foo的代码复制到A.cpp中它可以正常工作。

所以,我不明白,为什么G ++找不到符号,即使它显然存在于静态库中? 我没有任何其他功能的这个问题。

注意:如果是,我正在运行Linux,使用QtCreator,我使用qmake进行两个项目(但静态库是纯STL C ++,不涉及Qt)。

编辑:查看真实的涉及文件:

https://github.com/jcelerier/spectral-subtraction/blob/master/libnoisered/math_util.h

https://github.com/jcelerier/spectral-subtraction/blob/master/libnoisered/math_util.cpp

A.cpp:

https://github.com/jcelerier/spectral-subtraction/blob/master/libnoisered/estimation/simple_estimation.cpp

项目文件:

https://github.com/jcelerier/spectral-subtraction/blob/master/libnoisered/libnoisered.pro

您在.h文件中的签名;

void compute_power(fftw_complex *in, double *powoutput, int size);

.cpp文件中的签名不兼容;

void compute_power(fftw_complex *in, double *powoutput, unsigned int size)

它们被命名为不同的符号以进行链接。

改变它们是相同的,事情应该链接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM