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

为什么更改#cgo LDFLAGS -l不能更改导入的库

更改#cgo LDFLAGS -l不能更改导入的库是因为#cgo LDFLAGS -l只能用于指定链接器的参数,而不能用于更改导入的库。

在Go语言中,使用#cgo指令可以在Go代码中嵌入C代码,并且通过#cgo指令可以指定编译和链接C代码时的参数。其中,-l参数用于指定链接器需要链接的库。

然而,这里需要注意的是,-l参数只是告诉链接器需要链接某个库,而并不会改变Go代码中导入库的方式。Go语言中导入库的方式是通过import语句来实现的,而不是通过#cgo指令。

所以,即使在#cgo LDFLAGS中指定了链接器需要链接的库,也不会改变Go代码中导入库的方式。如果需要更改导入的库,仍然需要通过修改Go代码中的import语句来实现。

总结起来,#cgo LDFLAGS -l只能用于指定链接器的参数,而不能用于更改导入的库。如果需要更改导入的库,需要修改Go代码中的import语句。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

go 使用 c接口

在使用go语言时, 有时为了方便可以直接调用c语言的接口与库, 不需要重复编写。...那就来说说在go语言里面如何调用c的接口 首先编写好c语言的源文件与头文件,这里举一个简单的例子,实现一个字符串大小写转换的接口 头文件c.h #pragma once #ifdef __cplusplus...,打包静态库 gcc -o c.o -c c.c  ar r libc_test.a c.o  接着编写go文件 在go文件里面,添加要导入的c的头文件与静态库 // #cgo LDFLAGS: -L...-lc_test -lstdc++  (导入c的库) // #cgo CFLAGS: -I ./              (导入头文件目录) // #include "c.h"         (包含头文件...) 注意每一行前面都要加 // 直接给一个调用上面的字符串转换接口的例子 package main // #cgo LDFLAGS: -L .

673100
  • 从外部设置传入Go变量

    前提:必须在build/run时指定 -ldflags="-X main.a=2.0 -X main.b=1" , 且a,b必须是string的变量,不能是常量, 不能是struct....今天我们注意到数据团队CloudFlare的另一个Go团队使用-X链接器选项将更多版本号烘焙到二进制文件中。 可以设置的-X Go链接器选项设置-ldflags链接的Go程序中字符串变量的值。...请注意,从Go 1.5开始,语法已更改为importpath.name=string。旧样式仍然受支持,但链接器会抱怨。...我担心这不适用于外部链接(例如使用cgo时),但正如我们所看到的,-ldflags="-linkmode=external -v"Go链接器首先运行并且照顾我们的-X。.../usr/local/Cellar/go/1.4.2/libexec/pkg/tool/darwin_amd64/6l -o hello -L $WORK -X main.hi hi -linkmode

    1.3K10

    全面总结: Golang 调用 CC++,例子式教程

    ---- go 调用 c/c++ 函数的实现方式有: 直接嵌套在go文件中使用,最简单直观的 导入动态库 .so 或 dll 的形式,最安全但是很不爽也比较慢的 直接引用 c/c++ 文件的形式,层次分明...(),例如 C.add(2, 1) 2,导入动态库 .so 或 .dll 的形式 假设项目目录如下 |-project | |-lib | | |-libvideo.dll | | |-libvideo.so...再引用 package main /* #cgo CFLAGS: -Iinclude #cgo LDFLAGS: -Llib -llibvideo #include "video.h" */.../xxx/yyy.mp4") C.exeFFmpegCmd(&cmd) } 先回答为什么说这种是最安全的和最不爽的?...,-Iinclude 指明 当前项目根目录的 include 文件夹 LDFLAGS: -L路径 -l名字 指明动态库的所在路径,-Llib -llibvideo,指明在 lib 下面以及它的名字 video

    5.2K50

    全面总结: Golang 调用 CC++,例子式教程

    ---- go 调用 c/c++ 函数的实现方式有: 直接嵌套在go文件中使用,最简单直观的 导入动态库 .so 或 dll 的形式,最安全但是很不爽也比较慢的 直接引用 c/c++ 文件的形式,层次分明...(),例如 C.add(2, 1) 2,导入动态库 .so 或 .dll 的形式 假设项目目录如下 |-project | |-lib | | |-libvideo.dll | | |-libvideo.so...再引用 package main /* #cgo CFLAGS: -Iinclude #cgo LDFLAGS: -Llib -llibvideo #include "video.h" */.../xxx/yyy.mp4") C.exeFFmpegCmd(&cmd) } 先回答为什么说这种是最安全的和最不爽的?...,-Iinclude 指明 当前项目根目录的 include 文件夹 LDFLAGS: -L路径 -l名字 指明动态库的所在路径,-Llib -llibvideo,指明在 lib 下面以及它的名字 video

    2.3K20

    CGO学习一,初步认知和基本数据类型转换

    Cgo\n")) } import "C" 的上方可以写需要导入的库 C 库,需要注释起来,CGO 会将此处的注释内容当做 C 的代码,被称为序文(preamble) 上述代码的功能解释 ★使用 CGO...是强类型语言 所以 cgo 中传递的参数类型必须与声明的类型完全一致,而且传递前必须用 ”C” 中的转化函数转换成对应的C类型,不能直接传入Go中类型的变量 通过虚拟的 C 包导入的C语言符号并不需要是大写字母开头...,它们不受Go语言的导出规则约束 #cgo 用法 我们可以使用 #cgo 语句设置编译阶段和链接阶段的相关参数 编译阶段的参数 主要用于定义相关宏和指定头文件检索路径 链接阶段的参数 主要是指定库文件检索路径和要链接的库文件.../include // #cgo LDFLAGS: -L/usr/local/lib -lpng // #include import "C" CFLAGS -DPNG_DEBUG 定义宏.../include LDFLAGS -L 指定链接时库文件检索目录 ,可以通过写 ${SRCDIR}来表示当前包的绝对路径 -l 指定链接时需要的库,此处是 png 库 条件编译 build tag 就是在我们

    86420

    go build 交叉编译

    /main-linux-amd64 输出Windows可执行文件: $ CGO_ENABLE=0 GOOS=windows GOARCH=amd64 go build -ldflags='-s -w -...) -o 表示输出指定文件名(默认为main) -a 表示强制重新构建 -ldflags参数 `-s -w` 表示减小体积,去除编译携带的符号表和调试信息 -s 忽略符号表和调试信息 -w 忽略DWARFv3...调试信息,将无法使用gdb进行调试 -extldflags "-static -fpic" 表示完全静态编译(默认是静态链接 个别库可能会导致动态链接),这样编译生成的文件就可以任意放到指定平台下运行...,不需要运行环境的基础依赖库() 二进制压缩工具upx(可选) Mac下使用brew安装 $ brew install upx $ upx --version upx 3.96 其他平台: https...s6QzFkT1YU3lwkuZSHNb-A https://dev.to/tidalcloud/how-to-cross-compile-go-app-for-apple-silicon-m1-27l6

    2.2K40

    【保姆级教程】Docker服务在双架构(X86和ARM)编译统一实践

    在程序中,我们使用了CGO LDFLAGS关键字来链接libcurl库,并使用了C语言的头文件来调用libcurl库的函数。编译ARM架构的程序接下来,我们需要编译ARM架构的程序。...-o myprogram-arm main.go这个命令会使用arm-linux-gnueabihf-gcc交叉编译工具来编译ARM架构的程序,并使用CGO LDFLAGS关键字来链接libcurl库...在进行CGO编译时,我们可以使用CGO LDFLAGS等关键字来指定需要链接的库和编译选项。...#cgo LDFLAGS#cgo LDFLAGS指令符可以用来指定链接器的选项。在进行多架构编译时,我们可以使用#cgo LDFLAGS指令符来指定不同操作系统和架构下的链接选项。...例如,我们可以使用以下指令符来指定Windows x64架构下的链接选项:#cgo LDFLAGS: -L/usr/local/lib -lcurl 这个指令符会在Windows x64架构下使用-L/

    7.6K51

    【保姆级教程】Docker服务在双架构(X86和ARM)编译统一实践

    在程序中,我们使用了CGO LDFLAGS关键字来链接libcurl库,并使用了C语言的头文件来调用libcurl库的函数。 编译ARM架构的程序 接下来,我们需要编译ARM架构的程序。...在进行CGO编译时,我们可以使用CGO LDFLAGS等关键字来指定需要链接的库和编译选项。...#cgo LDFLAGS #cgo LDFLAGS指令符可以用来指定链接器的选项。在进行多架构编译时,我们可以使用#cgo LDFLAGS指令符来指定不同操作系统和架构下的链接选项。...例如,我们可以使用以下指令符来指定Windows x64架构下的链接选项: #cgo LDFLAGS: -L/usr/local/lib -lcurl 复制  这个指令符会在Windows x64架构下使用...-L/usr/local/lib和-lcurl链接选项来链接libcurl库。

    1.9K60
    领券