c -创建包含护士的静态库



我想创建一个使用ncurses实现TUI接口的静态库。我是这个话题的新手,应用这些答案并不奏效为我而战。

  • rpath
  • 组合多个库

我想在库中链接varViewer.c。我用这段代码来编译一个示例文件。

编译src/example.c和src/viewer/varViewer.c:

    gcc -Wall -Wextra -Wnonnull  -Isrc/viewer/
     -c src/example.c -o obs/example.o -lncurses
     -fsanitize=undefined -fprofile-arcs -ftest-coverage -Winline -O2
    gcc -Wall -Wextra -Wnonnull  -Isrc/viewer/ 
     -c src/viewer/varViewer.c -o obs/viewer/varViewer.o -lncurses
     -fsanitize=undefined -fprofile-arcs -ftest-coverage -Winline -O2
奥林匹克广播服务公司/

链接的例子。O to bin/example:

    gcc -o bin/example -Isrc/viewer/
     obs/example.o obs/viewer/varViewer.o -lncurses
     -fsanitize=undefined -fprofile-arcs -ftest-coverage -Winline -O2

bin/example按预期工作。我试着编译一个合适的目标文件:

编译src/观众/varViewer.c:

    gcc -Wall -Wextra -Wnonnull  -Isrc/viewer/
    -c src/viewer/varViewer.c -o lib/objects/varViewer.o
    -lncurses -fPIC -O2

放到库中:

    ar -cvr lib/libvarViewer.a lib/objects/varViewer.o

当我尝试在其他项目中使用它时,使用

包含它

- l…/src/观众/lib -lvarViewer

标志,但所有引用的函数都来自于ncurses库和

纳米/lib/libvarViewer.a

                .... 
             U __snprintf_chk
             U __stack_chk_fail
             U start_color
             U stdscr
             U strchr
             U strlen
             U strncmp
             U strncpy
             U strnlen
             U waddnstr
             U wborder
             U wclear
             U wcolor_set
             U wgetnstr
             U winsdelln
             U winsnstr
             U wmove
             U wrefresh

如何正确调用ar?我已经尝试过使用-T选项生成一个"瘦"库。

gcc -Wall -Wextra -Wnonnull  -Isrc/viewer/
-c src/viewer/varViewer.c -o lib/objects/varViewer.o
-lncurses -fPIC -O2

将简单地编译varViewer.c文件,因此将忽略库,因为它不会链接到最终的可执行文件。

因此,对象文件varViewer。0将对varViewer.c中未定义的符号有未定义的引用(U报告在nm中,如您所示)。这些不仅包括libcurses库,还包括常规的libc库(它提供诸如strlen, strncpy,…等符号)。但是,请记住,libc将被编译器自动添加到您的链接阶段,除非您明确地另有说明。

可以使用命令ar x从其他静态库中提取对象文件(.o),然后再次使用ar生成新的库。虽然这是可能的,但我不认为将所有的库都包含到您的库中是一个好主意。我认为最好链接所有需要的库,因为这样可以确保应用程序链接到可用的最新版本,而如果您将一个库嵌入到您的应用程序中,那么将坚持该版本,直到您升级它。

相关内容

  • 没有找到相关文章

最新更新