使用整齐的库时出现“未定义的引用”错误,尤其是“tidy.h”

时间:2017-07-04 09:29:42

标签: c gcc tidy

我目前正在使用一个脚本,该脚本使用XML验证无效的tidy library文件或字符串。

测试它正在运行的示例代码:

#include <tidy.h>
#include <tidybuffio.h>
#include <stdio.h>
#include <errno.h>

int main(int argc, char **argv )
{
  const char* input = "&lt;title&gt;Foo&lt;/title&gt;&lt;p&gt;Foo!";
  TidyBuffer output = {0};
  TidyBuffer errbuf = {0};
  int rc = -1;
  Bool ok;

  TidyDoc tdoc = tidyCreate();                     // Initialize "document"
  printf( "Tidying:\t%s\n", input );

  ok = tidyOptSetBool( tdoc, TidyXhtmlOut, yes );  // Convert to XHTML
  if ( ok )
    rc = tidySetErrorBuffer( tdoc, &errbuf );      // Capture diagnostics
  if ( rc >= 0 )
    rc = tidyParseString( tdoc, input );           // Parse the input
  if ( rc >= 0 )
    rc = tidyCleanAndRepair( tdoc );               // Tidy it up!
  if ( rc >= 0 )
    rc = tidyRunDiagnostics( tdoc );               // Kvetch
  if ( rc > 1 )                                    // If error, force output.
    rc = ( tidyOptSetBool(tdoc, TidyForceOutput, yes) ? rc : -1 );
  if ( rc >= 0 )
    rc = tidySaveBuffer( tdoc, &output );          // Pretty Print

  if ( rc >= 0 )
  {
    if ( rc > 0 )
      printf( "\nDiagnostics:\n\n%s", errbuf.bp );
    printf( "\nAnd here is the result:\n\n%s", output.bp );
  }
  else
    printf( "A severe error (%d) occurred.\n", rc );

  tidyBufFree( &output );
  tidyBufFree( &errbuf );
  tidyRelease( tdoc );
  return rc;
}

正在运行

  

gcc -I / usr / include / tidy tidy_example.c

我在终端上输出了这个输出:

  

/tmp/cclFfP4I.o:在函数main': tidy_exa.c:(.text+0x6e): undefined reference to tidyCreate'中   tidy_exa.c :(。text + 0x9e):未定义引用tidyOptSetBool' tidy_exa.c:(.text+0xba): undefined reference to tidySetErrorBuffer'   tidy_exa.c :(。text + 0xd6):对tidyParseString' tidy_exa.c:(.text+0xeb): undefined reference to tidyCleanAndRepair'的未定义引用   tidy_exa.c :(。text + 0x100):对tidyRunDiagnostics' tidy_exa.c:(.text+0x11f): undefined reference to tidyOptSetBool'的未定义引用   tidy_exa.c :(。text + 0x149):未定义引用tidySaveBuffer' tidy_exa.c:(.text+0x1a6): undefined reference to tidyBufFree'   tidy_exa.c :(。text + 0x1b2):对tidyBufFree' tidy_exa.c:(.text+0x1be): undefined reference to tidyRelease'的未定义引用   collect2:错误:ld返回1退出状态

关于如何解决此问题的任何想法,或任何其他库在c / c ++中对文件或字符串(无效的XML)执行相同操作。

任何建议也会受到欢迎。

1 个答案:

答案 0 :(得分:2)

您忘记使用-l选项链接lib。

例如

gcc -I/usr/include/tidy -ltidy tidy_example.c -o example

如果您还需要为lib指定特定文件夹,则必须添加-L选项,如

gcc -I/usr/include/tidy -L/usr/local/lib/tidy -ltidy tidy_example.c -o example