首页
学习
活动
专区
工具
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.4K40

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

规则是没有这个功能的,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.4K20
  • 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.4K51

    谷歌的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将生成一个可执行文件或其他目标文件。

    49110

    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.8K10

    【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

    27210

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

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

    1.2K10

    构建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 文件在该目录下: . ├──

    4K10

    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

    89760

    如何为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

    Blender试用

    此外,运行一个随机的未知二进制文件是不安全的(它可能会格式化磁盘、删除文件等)。系统调用拦截的第二个重要作用是隔离。在 Blender 下,二进制文件完全被隔离,并且不会对真实世界产生任何影响。.../blender/blender.so ....如果没有检测到错误,它将不会打印任何内容并以0状态退出(没有正常输出和状态)。如果检测到错误,将打印错误报告并以非0状态退出。...作者说可以与压力工具一起用作一种简易的模糊测试工具 go get golang.org/x/tools/cmd/stress LD_PRELOAD=bazel-bin/blender/blender.so.../bash 结合Centipede使用 build Centipede 和 Blender bazel build -c opt :all blender:all 使用一些额外的标志构建目标二进制文件

    6110
    领券