Базель cc_binary () создает файл .so без каких-либо символов? - PullRequest
1 голос
/ 02 апреля 2020

Это с базелем 2.2.0, работающим в ubuntu 16.04. Я реализовал макрос для "сборки" библиотеки C ++ и получения файлов .a и .so.

def add_cc_lib(lib, SRCS, HDRS, lib_defines, lib_includes, lib_copts, lib_linkopts, archive_libs_deps, additional_deps):
    # Define target to create .a for this library
    native.cc_library(
        name = lib,
        srcs = SRCS,
        hdrs = HDRS,
        deps = archive_libs_deps + additional_deps,
        defines = lib_defines,
        includes = lib_includes,
        copts = lib_copts,
        linkopts = lib_linkopts,
        linkstatic = 1,
        visibility = ["//visibility:public"]
    )

    # Define target to also create .so for this library
    native.cc_binary(
        name = "lib" + lib + ".so",
        srcs = [":" + lib] + archive_libs_deps,
        deps = additional_deps,
        defines = lib_defines,
        includes = lib_includes,
        copts = lib_copts,
        linkopts = lib_linkopts,
        linkshared = 1,
        linkstatic = 1,
        visibility = ["//visibility:public"],
    )

, где archive_libs_deps и additional_deps - это список целей, предоставляемых при этом add_cc_lib() макрос используется для добавления библиотеки C ++ в мой репозиторий.

Проблема в том, что, хотя при этом получается libfoo.so, в нем нет символов из foo.a:

# nm bazel-bin/<path>/libfoo.so
0000000000002008 A __bss_start
0000000000002008 b completed.7594
                 w __cxa_finalize
0000000000000630 t deregister_tm_clones
00000000000006c0 t __do_global_dtors_aux
0000000000001d40 t __do_global_dtors_aux_fini_array_entry
0000000000002000 d __dso_handle
0000000000001d50 d _DYNAMIC
0000000000002008 A _edata
0000000000002009 A _end
0000000000000730 T _fini
0000000000000700 t frame_dummy
0000000000001d48 t __frame_dummy_init_array_entry
0000000000000780 r __FRAME_END__
0000000000001fd8 d _GLOBAL_OFFSET_TABLE_
                 w __gmon_start__
00000000000005e0 T _init
                 w _ITM_deregisterTMCloneTable
                 w _ITM_registerTMCloneTable
0000000000001d38 d __JCR_END__
0000000000001d38 d __JCR_LIST__
                 w _Jv_RegisterClasses
0000000000000670 t register_tm_clones
0000000000002008 d __TMC_END__
0000000000002008 d __TMC_LIST__

Я довольно долго искал по inte rnet и пробовал несколько вещей без успеха. Я что-то здесь упускаю? Любая помощь очень ценится.

1 Ответ

1 голос
/ 03 апреля 2020

Пропуск alwayslink = True в цель cc_library.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...