亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

鏈接到 libavformat 的最小 Cgo 應用程序意外執行

鏈接到 libavformat 的最小 Cgo 應用程序意外執行

Go
繁星淼淼 2023-08-14 14:47:17
我有一個最小的 C 程序#include <libavformat/avformat.h>AVFormatContext *open(const char *url) {    printf("URL %s\n", url);    AVFormatContext *ctx = NULL;    int err = avformat_open_input(&ctx, url, 0, 0);    return ctx;}int main(int argc, char **argv) {    open(argv[1]);}它可以工作,它打印我傳入的文件路徑,并返回一個有效的 AVFormatContext。我將代碼粘貼到 Golang 程序中:package main// #include <libavformat/avformat.h>//  AVFormatContext *open(const char *url) {//  printf("URL %s\n", url);//  AVFormatContext *ctx = NULL;//  int err = avformat_open_input(&ctx, url, 0, 0);//  return ctx;//  }//  #cgo LDFLAGS: -lavformatimport "C"import (    "fmt"    "os")func main() {    fmt.Println("Lets try this")    url := os.Args[1]    C.open(C.CString(url))}這會打印URL /dev/urandom(無論我給它什么參數)并掛起。非常奇怪的是,它不打印Lets try this。這是在 Mac 上使用 ffmpeg 并從自制程序轉到:ffmpeg version 4.2.1Copyright (c) 2000-2019 the FFmpeg developers   built with Apple clang version 11.0.0 (clang-1100.0.33.8)go version go1.13.4 darwin/amd64我目前的猜測是編譯器 ABI 不兼容,或者 libavformat 在 main() 之前運行某些內容?
查看完整描述

1 回答

?
犯罪嫌疑人X

TA貢獻2080條經驗 獲得超4個贊

問題出在函數名稱上open。它屏蔽了系統調用 open,go 必須在到達 main 之前調用。



查看完整回答
反對 回復 2023-08-14
  • 1 回答
  • 0 關注
  • 144 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號