首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

bazel cc_binary()创建没有任何符号的.so文件?

bazel cc_binary()创建没有任何符号的.so文件是因为在构建过程中缺少了链接器的选项。链接器负责将目标文件中的符号解析为最终的可执行文件或共享库。在使用bazel的cc_binary()规则时,需要确保在BUILD文件中正确设置了链接器选项。

要创建一个具有符号的.so文件,可以在BUILD文件中使用cc_library()规则来定义一个共享库目标,并将其链接到cc_binary()规则中。cc_library()规则将源文件编译为目标文件,并生成具有符号的共享库文件。

以下是一个示例的BUILD文件:

代码语言:txt
复制
cc_library(
    name = "my_library",
    srcs = ["my_source_file.cc"],
    hdrs = ["my_header_file.h"],
    visibility = ["//visibility:public"],
)

cc_binary(
    name = "my_binary",
    srcs = ["main.cc"],
    deps = [":my_library"],
)

在这个示例中,cc_library()规则定义了一个名为my_library的共享库目标,它包含了my_source_file.cc和my_header_file.h。cc_binary()规则定义了一个名为my_binary的可执行文件目标,它依赖于my_library共享库。

通过这样的设置,bazel将会正确地链接共享库中的符号,从而创建一个具有符号的.so文件。

推荐的腾讯云相关产品:腾讯云云服务器(CVM)和腾讯云容器服务(TKE)。

  • 腾讯云云服务器(CVM):提供高性能、可扩展的云服务器实例,适用于各种计算场景。详情请参考:腾讯云云服务器
  • 腾讯云容器服务(TKE):基于Kubernetes的容器管理服务,提供高可用、弹性伸缩的容器集群。详情请参考:腾讯云容器服务
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

百度Apollo源码学习之Bazel编译介绍

(如果工作区中一个目录包含BUILD文件,那么它就是一个package) 要指定一个目录为Bazel工作区,就只要在该目录下创建一个空WORKSPACE文件即可。...: 一个工作区是在文件系统包含文件要构建软件,以及符号链接到包含生成输出目录目录。...因此,Bazel会忽略工作空间中任何目录树,这些工作树植根于包含WORKSPACE文件子目录(因为它们形成另一个工作空间)。...BUILD文件 BUILD文件中包含了多个不同类型bazel指令。 其中最重要是编译规则(build rule),它告诉bazel怎么编译目标输出,是一个执行文件还是一个库。...例子: cc_binary( name = "hello-world", srcs = ["hello-world.c"], ) 其中cc_binary,name,srcs都是相关target

3.3K40

自定义规则实现将多个静态库合并为一个动态库或静态库

规则是没有这个功能Bazel C/C++ 相关内置规则有: cc_binary :生成可执行文件 cc_import :允许用户导入预编译 C/C++ 库,包括动态库、静态库 cc_library...例如 cc_binary 规则可能: 输入(Inputs):获取一组 .cpp 文件 动作(Action):基于输入运行 g++ 输出(Output):返回一个可执行文件Bazel 角度来看,g...这就涉及到了中间文件产生,有一个很重要点就是中间文件产生只能在当前 Bazel 包中创建。...:将一个字符串写入文件 ctx.actions.expand_template :从模板文件创建一个文件 因此我们可以通过创建一个运行脚本命令 Action 来运行上面所述打包命令,即使用 ctx.actions.run_shell...另外创建中间文件因为是拷贝过程,实际生成中间文件Bazel 已经做了处理,居然是软链接到沙箱(sandbox)源文件,这中间原理我暂未弄清楚,或许就是沙箱优化 对于交叉编译器,我们必须使用 find_cpp_toolchain

5.3K20
  • Linux动态链接库.so文件创建与使用

    ldconfig检查已经存在文件,然后创建soname符号链接到真正函数库,同时设置/etc/ld.so.cache这个缓冲文件。这个我们稍后再讨论。...大多数RedHat系列发行包/etc/ld.so.conf文件里面不包括/usr/local/lib这个目录,如果没有这个目录的话,我们可以修改/etc/ld.so.conf,自己手动加上这个条目。...这个选项在创建ELF格式文件时候,会将所有的符号加入到动态符号表中。可以参考ld帮助获得更详细说明。 3.5. 安装和使用共享函数库 一旦你定义了一个共享函数库,你还需要安装它。...Linux系统下,DL函数库与其他函数库在格式上没有特殊区别,我们前面提到过,它们创建时候是标准object格式。...文件创建与使用 Linux动态库(.so)搜索路径 Linux 动态库与静态库制作及使用详解

    9.3K51

    谷歌Bazel构建工具

    语言支持丰富:Bazel支持多种编程语言,包括Java、C++、Python等,方便开发者使用。 2. 规则清晰明确:Bazel使用称为BUILD文件规则文件来描述如何构建目标项目。...四、案例分析 为了更直观地展示Bazel在软件开发中应用,让我们以一个简单C++项目为例。假设我们有一个简单C++程序,包含多个源文件和头文件,我们需要使用Bazel来构建和测试这个项目。...首先,我们需要创建一个BUILD文件来描述如何构建我们项目。在这个文件中,我们可以定义目标及其依赖项。...例如: cc_binary(name = "my_program", srcs = ["main.cpp", "file1.cpp", "file2.cpp"],...如果一切顺利,Bazel将生成一个可执行文件或其他目标文件

    41310

    Istio实战系列-Envoy Proxy构建分析

    Bazel定义构建依赖关系和规则,并管理构建生成临时文件及二进制文件,具体编译工作是调用各个语言编译工具如GCC, JAVAC等完成。...为了理解Envoy编译过程,我们需要先了解Bazel几个基础概念 workspace: 文件系统中一个目录,该目录中包含了用于编译软件所需所有源文件。...外部Repository在WORKSPACE文件中进行定义。 编译Envoy 首先参考Bazel官方文档安装Bazel,并且需要安装gcc等相关工具。...如果一切顺利,bazel会在proxy目录下创建一个目录链接bazel-bin,指向生成二进制文件。 编译过程分析 源码目录结构如下,主要构建逻辑在引号包含文件中。...这是bazel语法,表明调用src/envoy这个目录下BUILD文件中Envoy这个target。

    1.7K10

    修复 VisualStudio 构建时没有将 NuGet PDB 符号文件拷贝到输出文件

    本文告诉大家如何修复 VisualStudio 构建时没有将 NuGet PDB 符号文件拷贝到输出文件问题。...如果 VisualStudio 构建时没有将 NuGet PDB 符号文件拷贝到输出文件夹,那将会在调试时候,由于找不到 PDB 符号文件而加载符号失败 尽管这个坑从 2017 到现在,来来回回修了好多次...本文将告诉大家如何强行设置拷贝 PDB 符号文件 方法是在自己项目的 csproj 项目文件夹里面添加如下代码 <Target Name="IncludeSymbolFromReferences"...任务,这个任务里面,将会尝试去找所有的引用 pdb 文件,如果找到了,就放入到输出拷贝里面 如此即可在构建时,将引用 NuGet 包 DLL 对应 PDB 文件拷贝到输出文件夹,而不需要关注具体框架版本...当然,在每个项目都拷贝以上代码也不是好主意。

    1.1K10

    【C++】基础:代码编译与构建工具介绍

    gcc可以将C语言源程序编译、链接成可执行文件,如果没有给出可执行文件名字,gcc将生成一个名为a.out文件(g++类似,是编译C++程序)。...常用构建工具 make make工具相当于一个批处理工具,本身没有编译和链接功能,而是用类似于批处理方式通过调用makefile文件中用户指定编译命令(如gcc、g++)来进行编译和链接(当作批处理工具用就行...这里目标必须add_executable、 add_library、 add_custom_target 命令创建目标:add_dependencies(target-name depend-target1...这里 target 必须已经被创建, 链接item 可以是已经存在 target(依赖关系会自动添加):target_link_libraries(Main Lib) 常用变量: PROJECT_SOURCE_DIR...<< std::endl; return 0; } BUILD cc_binary( name = "hello", srcs = ["main.cc"], ) 构建与运行: bazel

    20010

    构建Golang项目

    1 rules_go 与 gazelle Bazel 支持很多内置规则,语言相关规则有 Shell、Objective-C、C++ 和 Java,比如 sh_binary、cc_binary、cc_import...但是 Go 编译内置规则没有支持,不过好在 Bazel 支持规则扩展,可以自定义 Go 相关规则,包括可以实现如 go_binary、go_library、go_test等规则。...文件 $ bazel run tools/cli:gazelle # 生成依赖仓库下载代码自动生成到 go_repositories.bzl 文件中,然后自动生成导入代码到 WORKSPACE 文件中...%go_repositories 2 go build 到 bazel build 2.1 初始化 Bazel 构建 项目根目录创建 WORKSPACE 和 BUILD 文件,在 WORKSPACE...gazelle_dependencies() 比如我们创建了一个 Go 一个命令行工具项目,放于我们工程 tools/cli 目录下,即 Go 项目 go.mod 文件在该目录下: . ├──

    3.9K10

    AI运行环境搭建

    因为这里编译gcc高版本只用于编译tensorflow,并且不希望对系统原来gcc产生影响。所以单独创建一个文件夹用于安装编译使用环境软件。使用 --prefix 可以自定义安装路径。...cd .. mkdir gcc-4.9.4-build-temp #创建编译gcc时路径 mkdir software #创建安装gcc路径 cd gcc-4.9.4-build-temp/ .....如果服务器上没有java1.8也可以下载一个tat.gz方式java包,解压并正确配置环境变量 这里安装bazel0.4.5与0.4.0安装方法有些不同,参考这里 之前尝试了使用0.4.0版本bazel.../software/bin/ 安装tensorflow1.2.0 很多指引中中在这步中提示不能使用NFS文件系统,因为我CentOS并没有挂载过NFS所以并没有验证过。....so 文件复制到/usr/local/lib下就可以使用了 cp bazel-bin/tensorflow/libtensorflow_cc.so /usr/local/lib/ #将需要文件放入

    1.8K20

    Android TensorFlow机器学习示例

    我在网上搜索了很多,但没有找到一个简单方法或一个简单例子来构建TensorFlow for Android。自己尝试了很久才构建好。于是我决定写下来,以节省他人时间。...所以,我们需要jar(Java API)和.so(c ++编译)文件。 我们必须具有pre-trained 模型文件和分类标签文件。 下图就是我们将要构建一个物体识别程序。...构建玩之后Tensorflow库将位于: bazel-bin/tensorflow/contrib/android/libtensorflow_inference.so 构建Jar文件bazel...我已经构建了.so文件和jar,可以直接从下面的项目中使用。 我创建了一个完整运行示例应用程序在这里。 3.训练模型 我们需要预训练模型和标签文件。...compile files('libs/libandroid_tensorflow_inference_java.jar') 在主目录中创建jniLibs文件夹,并将libtensorflow_inference.so

    89260

    如何为Tensorflow构建自定义数据集

    所以想构建一个简单原型并直接将Restcomm连接到Tensorflow。经过几天研究,意识到没有简单方法可以将实时流式音频/视频媒体(SIP / RTP)提供给张量流模型。...利用来自文本,cifar和parquet代码。还有一个关于创建TF操作文档证明是有帮助。...看一下TF IO数据集源代码文件结构。 ? TF IO pcap数据集源代码目录结构 Tensorflow使用Bazel作为构建系统,Google于2015年开源。...以下是PcapDataset BUILD文件。它声明了动态pcap库公共名称(_pcap_ops.so)。列出要从(pcap_input.cc和pcap_ops.cc)构建两个源文件。...Bazel BUILD文件 下一个重要文件是pcap_ops.cc在其中声明将在TF运行时环境中注册并可在TF应用程序中使用TF操作。

    1.9K30

    机器学习:如何在安卓上集成TensorFlow

    安装Bazel(https://bazel.build/versions/master/docs/install.html)。Bazel是TensorFlow主要编译系统。...我们SDK和NDK路径就跟下面一样: 然后编译生成.so文件: 将armeabi-v7a换成我们所需要目标架构。...库会被放置在: 编译Java副本: 我们可以在这里找到JAR文件: 现在我们有了jar和.so文件。你也可以从下面的工程中直接提取使用我已经建立好.so文件和jar。...如果你在搭建这个项目的过程中有任何问题的话,联系我,我会非常乐意帮助你。 Happy Coding:) 读者问答 Q:我很疑惑要怎么连接到‘so’库?...也没有任何一行像’System.loadLibray’代码? A:System.loadLibrary已经写在TensorFlow jar中了。 Q:所以这是一个C++应用还是Java应用啊?

    1.4K50
    领券