首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在构建DEB包时,lintian报告shlib调用-退出flex生成的源代码。

在构建DEB包时,lintian报告shlib调用-退出flex生成的源代码。
EN

Stack Overflow用户
提问于 2012-11-13 16:00:39
回答 1查看 126关注 0票数 0

如果黛布包包含由flex生成的源代码构建的共享库,/usr/bin/lintian将报告

shlib-调用-出口

由于flex生成的函数yy_fatal_error中的exit()调用,所以:

代码语言:javascript
复制
static void yy_fatal_error (yyconst char* msg )
{
        (void) fprintf( stderr, "%s\n", msg );
        exit( YY_EXIT_FAILURE );
}

如何修改DEB包,使lintian停止报告shlib调用-退出?

DEB包在其构建脚本中使用CMake。CMake源代码的相应片段是

代码语言:javascript
复制
flex_target(scanner lexer.l ${CMAKE_CURRENT_BINARY_DIR}/lexer.c)
bison_target(parser parser.y ${CMAKE_CURRENT_BINARY_DIR}/parser.c) 
add_flex_bison_dependency(scanner parser)
add_library(parse-and-scan SHARED ${FLEX_scanner_OUTPUTS} ${BISON_parser_OUTPUT_SOURCE})

有关软件版本的信息:

  • flex 2.5.35
  • cmake 2.8.9
  • 林田2.5.10
  • Linux发行版:Debian不稳定(sid)

大约一周前,我在debian导师的邮件列表上发布了一个相似问题

在flex生成的源代码中有一个exit()调用的问题是在flex帮助邮件列表中的养大,但是这个帖子没有给出答案。

EN

回答 1

Stack Overflow用户

发布于 2012-11-13 16:00:39

通过将exit()调用替换为abort()调用,,lintian将不再报告shlib调用-退出。lexer_replaced.c可以通过将文件lexi.c读入字符串,然后执行文本替换,然后将字符串写入新文件(任意文件名)来处理此替换。

代码语言:javascript
复制
flex_target(scanner lexer.l ${CMAKE_CURRENT_BINARY_DIR}/lexer.c)
bison_target(parser parser.y ${CMAKE_CURRENT_BINARY_DIR}/parser.c) 
add_flex_bison_dependency(scanner parser)
set(replaced_file ${CMAKE_CURRENT_BINARY_DIR}/lexer_replaced.c)
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/replace_exit_with_abort.cmake "
  file(READ ${FLEX_scanner_OUTPUTS} var1)
  string(REPLACE \"exit\\( YY_EXIT_FAILURE \\);\" \"abort();\" var2 \"\${var1}\")
  file(WRITE ${replaced_file} \"\${var2}\")
")
add_custom_command(OUTPUT ${replaced_file}
  COMMAND ${CMAKE_COMMAND} 
  ARGS -P ${CMAKE_CURRENT_BINARY_DIR}/replace_exit_with_abort.cmake
  DEPENDS ${FLEX_scanner_OUTPUTS}
)
add_library(parse-and-scan SHARED ${replaced_file} ${BISON_parser_OUTPUT_SOURCE})

我认为这是一个可行的解决方案,但从长远来看,最好的解决方案是修改程序flex,使其始终从函数返回,而不是有时使用exit()调用。如果出现错误情况,flex函数将使用不同的返回值将此信息传递给调用方。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13364139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档