我已经成功编译了我的拼写检查程序和libspellcheck库。现在我的问题是允许其他开发人员使用我的libspellcheck。我创建了一个简单的测试程序:

#include <spellcheck.h>
#include <iostream>

using namespace std;

int main(void)
{

    bool spell_result = check_spelling("english.dict", "abed");

    if(spell_result == true)
    {
        cout << "your dictionary / libspellcheck works!" << endl;
    }
    else
    {
        cout << "problem with your dictionary / libspellcheck" << endl;
    }

    return 0;
}


如果一切正常,程序将输出:

您的字典/ libspellcheck有效

但是,该程序甚至无法编译。我用了:

g ++ -lspellcheck -o测试test.cpp

而且它没有用。我相信这是头文件的问题,因为编译器给了我这个:

test.cpp: In function ‘int main()’:
test.cpp:9:59: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
test.cpp:9:59: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
/tmp/ccIz3ivT.o: In function `main':
test.cpp:(.text+0x19): undefined reference to `check_spelling(char*, char*)'
collect2: ld returned 1 exit status


唯一的问题是,spellcheck.h位于/ usr / include中,我认为它应该在该位置。我的问题是,我该如何解决此错误,这是我的头文件存在问题还是libspellcheck问题。如果您需要查看其他代码,我会很乐意提供它,因为spellcheck和libspellcheck是根据GPL许可的。

最佳答案

假设标题中的check_spelling声明正确,请尝试以下操作:

g++ -o test test.cpp -lspellcheck


-l应该在对象之后,具体取决于命令行中的库)。从头文件开始,确实可以找到并使用它,否则将从编译器(而不是链接器)中得到错误。

关于c++ - 静态库的链接器错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14443924/

10-09 06:32