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

661100
  • 从外部设置传入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.2K10

    全面总结: 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

    4.9K50

    全面总结: 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 就是在我们

    71320

    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.1K40

    【保姆级教程】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/

    6.4K51

    【保姆级教程】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.4K60

    c语言调用go封装动态步骤及减小体积包方法

    嫌go编译后动态或静态供c代码或嵌入式终端使用,体积太大?upx工具解决这一问题。 upx真是一个神器,再也不用担心和抱怨go在嵌入式linux应用上体积包大了。...1.go build添加 -ldflags="-w -s" 会去除 DWARF调试信息、符号信息 ``` go build -ldflags="-w -s" ota_main.go ``` ```...必须导入 “C” 包 必须在可外部调用函数前加上 【//export 函数名】注释 必须是main包,切含有main函数,main函数可以什么都不干 2.优化方案 第二步:压缩优化 执行命令: `...其次import “C”是必须,并且和上面的C代码之间不能用空行分割,必须紧密相连 如果执行go run **时出现 # command-line-arguments could not determine...5、利用defer C.free 和unsafe.Pointer显示释放调用C.Cstring所生成内存块。 go代码中main函数是必须,有main函数才能让cgo编译器去把包编译成c

    3.1K20
    领券