【问题标题】:Link tidylib library to C application将 tidylib 库链接到 C 应用程序
【发布时间】:2015-10-26 12:49:53
【问题描述】:

我正在尝试在我的 C 应用程序中使用 tidylib 库。编译时出现以下错误:

$ make
rm -f sbo-export
cc sbo-export.c safarilib.c -L/usr/local/lib -lcurl  -L/usr/local/Cellar/libtidy/lib -I/usr/local/Cellar/libtidy/include -o sbo-export
Undefined symbols for architecture x86_64:
  "_tidyCreate", referenced from:
      _safari_init_session in safarilib-c7ab6a.o
  "_tidyParseString", referenced from:
      _safari_init_session in safarilib-c7ab6a.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [default] Error 1

safarilib.c:

#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <tidy/tidy.h>
#include <tidy/buffio.h>
#include <curl/curl.h>
#include "safarilib.h"

void usage( char *username, char *password )
{
    TidyDoc tdoc = tidyCreate();
    char *input = "<html><body><h1>Hello World!</h1></body></html>";
    tidyParseString( tdoc, input );
}

有什么建议吗?


更多信息:

为了安装 libtidy,我做了以下操作:

  • http://tidy.sourceforge.net下载libtidy,然后
  • 按照文件tidy/build/readme.txt中的说明进行操作

我的库安装在这里:

/usr/local/Cellar/libtidy
/usr/local/Cellar/libtidy/bin
/usr/local/Cellar/libtidy/bin/tab2space
/usr/local/Cellar/libtidy/bin/tidy
/usr/local/Cellar/libtidy/include
/usr/local/Cellar/libtidy/include/buffio.h
/usr/local/Cellar/libtidy/include/platform.h
/usr/local/Cellar/libtidy/include/tidy.h
/usr/local/Cellar/libtidy/include/tidyenum.h
/usr/local/Cellar/libtidy/lib
/usr/local/Cellar/libtidy/lib/libtidy-0.99.0.dylib
/usr/local/Cellar/libtidy/lib/libtidy.a
/usr/local/Cellar/libtidy/lib/libtidy.dylib
/usr/local/Cellar/libtidy/lib/libtidy.la

【问题讨论】:

  • 您似乎并没有真正与图书馆链接。添加例如-ltidy 在结尾处。
  • 哦,伙计……这行得通。你能用这个回答这个问题并说明更多信息吗? (一些参考或类似的。)我是一个 C 初学者,这对我来说非常重要。非常感谢!

标签: c compilation linker include


【解决方案1】:

从编译器选项看来你没有指定 tidylib。

cc sbo-export.c safarilib.c -L/usr/local/lib -lcurl  -L/usr/local/Cellar/libtidy/lib -I/usr/local/Cellar/libtidy/include -o sbo-export

在这里你需要添加-ltidy-L 的路径。

一些关于linking的附加信息。

【讨论】:

  • 非常感谢。我错过了以下约定:“规则是,如果库称为 libsomething.a,则为 cc 提供参数 -lsomething。例如,数学库是 libm.a,因此您为 cc 提供参数 -lm。数学库的一个常见“问题”是它必须是命令行中的最后一个库。”
猜你喜欢
  • 2012-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-29
  • 2014-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多