Open CsVeryLoveXieWenLi opened 1 week ago
当CGO_ENABLED=1, 进行编译时, 会将文件中引用libc的库(比如常用的net包),以动态链接的方式生成目标文件。 当CGO_ENABLED=0, 进行编译时, 则会把在目标文件中未定义的符号(外部函数)一起链接到可执行文件中。
不明所以,但是不启用则编译成功,或许是符号没定义就检测了。
谢谢反馈 ,另外windows 编译可参考 https://github.com/buke/quickjs-go/issues/151#issuecomment-2134307728
我又看了一会,确实是CGO的开关? 如果不启用,使用了CGO的文件会被排除在外,导致缺定义,并非编译成功。
谢谢反馈 ,另外windows 编译可参考 #151 (comment)
谢谢您的答复,另外问一下,怎么链接动态库呢?我编译了动态库,也生成了.a文件,相当于vc的.lib文件。 我也查看了符号导出,可是,不论我如何在CGO中编写链接信息,最终结果就是找不到导出的函数。
原quickjs https://github.com/bellard/quickjs 并不支持编译为动态库,因此本项目是采取预编译为静态库,然后通过cgo调用。关于编译静态库的步骤请参考 https://github.com/buke/quickjs-go/blob/main/.github/workflows/build_static_lib.yml
原quickjs https://github.com/bellard/quickjs 并不支持编译为动态库,因此本项目是采取预编译为静态库,然后通过cgo调用。关于编译静态库的步骤请参考 https://github.com/buke/quickjs-go/blob/main/.github/workflows/build_static_lib.yml
好的,谢谢。
链接pthread后,则编译成功
经过我的再次编译,如果使用了win32协议的线程模型,链接时会报错,如果使用posix协议的线程模型,则不会。
有没有可能判断并链接?
奇怪,我搜索了一下,又说win32没有多线程,posix有?不知道,目前来看,使用posix即可,这也是推荐使用的线程模型。
1. 各类信息
Os: Windows 11 X64 GoLang: go version go1.23.2 windows/amd64 Compiler: Mingw-X64 14.2.0 (x86_64-14.2.0-release-win32-seh-ucrt-rt_v12-rev0) Command: PowerShell 5.1.22621.4111
2. 输出信息
3. 使用代码
4. 编译输出
5. 项目结构