【问题标题】:Library not linking/including properly库未正确链接/包含
【发布时间】:2013-10-08 14:43:54
【问题描述】:

好的,我意识到这可能看起来像重复,但我已经通过搜索帖子尝试了大多数变体和尝试,但我仍然一无所获。这是问题所在:我正在使用一个名为 libxls 的开源 C 库,该库用于读取 .xls 文件(恰当地命名为 project.. :) )。我使用的代码直接来自他们的网站,基本上只是一个开始的玩具示例,以确保我可以访问库:Link to their website with the source

#include <stdio.h>
#include "libxls/xls.h"

int main(){
    xlsWorkBook* pWB;
    pWB = xls_open("Book1.xls", "iso-8859-15//TRANSLIT");
    return 0;
}

就是这样。现在,它的语法很好。我通过 nm 命令知道 xls_open 确实可以作为 .a 库中的函数使用,所以这不是问题。在我的目录中,我有以下文件(请原谅多余的命名,我只是想强制它快速工作):

Book1.xls
libxlsreader.a
libxlsReader.c
libxlsreader.so

虽然我不认为我需要 .so 文件,因为我已经尝试动态链接到它所在的位置,但我认为这不是一个糟糕的尝试计划。好吧,所以,在包含行上,我不断地得到共同点:

libxlsreader.c:3:37: fatal erro: libxls/xls.h: No such file or directory

好的,所以我可能在库中链接错误,看看我的编译行参数:

gcc -o libxlsWrapper libxlsReader.c -L /usr/local/lib/ -lxlsreader -lpthread

嗯,嗯.. 看起来确实不错,/usr/local/lib/ 是库使用所有 .so 文件和我 PWD 中的 .a 文件创建自己的地方。现在,我是一名 Java 开发人员,所以我可能会遗漏一些明显的东西,但对于我的生活,我无法确定它是什么。这对我来说当然没问题。

我在 Linux Mint 15 KDE 32 位上使用 GCC (ubuntu/Linaro 4.7.3-lubunutul) 4.7.3。

如果您想重现该库以进行自己的测试或解决问题,可以从

获得

我不建议在 Windows 上重新创建它,我昨天尝试了几个小时并放弃了,所以只需执行常规 ./configure -> make -> make install 即可为您生成适当的库。

谢谢!

-会

edit #1:这是我尝试过的其他一些链接尝试,结果都相同。

gcc -o libxlsWrapper libxlsReader.c -L. -lxlsreader -I.
gcc -o libxlsWrapper libxlsReader.c -L. -lxlsreader -lpthread
gcc -o libxlsWrapper libxlsReader.c -L. -lxlsreader.so

我还尝试了一堆用 g++ 而不是 gcc(我知道扔飞镖),结果相同。

【问题讨论】:

    标签: c++ c linux static-libraries static-linking


    【解决方案1】:

    请使用find your_folder -type f -iname xls.h,然后使用gcc -I /the_path 包含xls.h 的路径。因为你遇到的问题是gcc找不到头文件xls.h

    【讨论】:

    • 当你引用 your_folder 时,你指的是库所在的文件夹(假设 .h 文件确实在静态库中?)编辑:好吧,我试过 find /usr/ local/libxls/lib/ -type f -iname xls.h 以及 /home/wdaniels/documents/libxlsWrapper/ (我运行它的主目录)并 find 没有提出任何建议。这让我相信 .h 文件的可见性确实存在问题
    • 到了极致,你可以find / -type f -iname xls.h。如果你找不到它,你做错了安装它。
    • 它可以找到该文件,但只能在我编译库的原始源中找到。好的,好吧,理论上我至少应该仍然能够链接到整个事情以使其现在可以工作。所以,找到的结果是 /usr/local/libxls/include/libxls/xls.h 所以我继续尝试命令: gcc -I /usr/local/libxls/include/libxls/ -o xlsWrapper libxlsReader .c -L。 -lxlsreader -lpthread 相同的结果。感谢您的帮助,顺便说一句,我知道在其他人的系统上很难诊断出这样的问题。
    • 好吧,这确实解决了它。我想我没有意识到,即使你链接了一个静态库,除非你有 .h 文件直接指向(在 .a 文件之外)或者已经定义了你自己的 .h 文件和所有必要的定义,它不会找到任何东西。无论如何,我让它编译和运行得很好,所以谢谢!我会投票,但还没有足够的声誉。
    • 现在我有足够的声望(在未来的晚些时候),我给了你应得的帮助,再次感谢,即使是不久前。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多