我目前正在使用一个脚本,该脚本使用XML
验证无效的tidy library
文件或字符串。
测试它正在运行的示例代码:
#include <tidy.h>
#include <tidybuffio.h>
#include <stdio.h>
#include <errno.h>
int main(int argc, char **argv )
{
const char* input = "<title>Foo</title><p>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)执行相同操作。
任何建议也会受到欢迎。
答案 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