First post, by nahum
RE: ffmpeg-4.4
DJGPP CROSS COMPILER, GCC v12.2.0
Host: Macbook Pro, macOS Monterey
link
link
"DJGPP Cross Compiler 12.2.0 Fails to Recognize Parameters in FFmpeg Source Code"
Hi,
I am using the referenced DJGPP cross compiler 12.2.0, to build the FFmpeg source code, and it's failing to recognize certain parameters and the script I used to build FFmpeg SRC follows:
#!/usr/bin/env bash# Path to DJGPP cross compilerexport DJGPP_PREFIX="/Users/owner/djcc"# export DJGPP_PREFIX=${DJGPP_PREFIX-/Users/owner/djcc}export DJGPP_PREFIX2=${DJGPP_PREFIX2-/Users/owner/ffcc}# exportDJGPP_PREFIX3=${DJGPP_PREFIX3-/Users/owner/Documents/DOSBox/NET/watt}# system pathexport PATH="$DJGPP_PREFIX/bin:$PATH"# Your cross compilation targetTARGET_ARCH="$DJGPP_PREFIX/bin/i586-pc-msdosdjgpp"# set C_INCLUDE_PATH environment variableexport C_INCLUDE_PATH="#DJGPP_PREFIX/i586-pc-msdosdjgpp/sys-include"# Download FFmpeg source codeFFMPEG_VERSION="4.4"FFMPEG_ARCHIVE="https://ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.gz"FFMPEG_SOURCE_DIR="ffmpeg-${FFMPEG_VERSION}"# Download FFmpeg sourceecho "Downloading FFmpeg source..."wget -c "$FFMPEG_ARCHIVE" || exit 1tar -xf "ffmpeg-${FFMPEG_VERSION}.tar.gz" || exit 1cd "$FFMPEG_SOURCE_DIR" || exit 1# clean debrigmake clean# Redirect both stdout and stderr to separate .err filesexec > >(tee -ia gcca.txt) 2> >(tee -ia gcc_err.err >&2)# Configure FFmpeg for cross-compilationecho "Configuring FFmpeg for cross-compilation..."./configure --enable-cross-compile \--prefix="$DJGPP_PREFIX2" \--target-os=ms-dos \--arch=i486 \--cross-prefix="$TARGET_ARCH-" \--extra-cflags="-I$DJGPP_PREFIX/i586-pc-msdosdjgpp/sys-include -I$DJGPP_PREFIX/include -I$DJGPP_PREFIX3/inc2 -I$DJGPP_PREFIX3/inc3" \--extra-ldflags="-L$DJGPP_PREFIX/i586-pc-msdosdjgpp/lib -L$DJGPP_PREFIX/lib -L$DJGPP_PREFIX3/lib2 -L$DJGPP_PREFIX3/lib3" \--enable-debug \--disable-shared \--enable-static \--disable-doc \--disable-programs \|| exit 1# Compile a hello world program for testingecho "Compiling hello world program for testing..."cat > helloai.c <<EOF#include <stdio.h>int main() {printf("Hello, world!\\n");return 0;}EOF
"$TARGET_ARCH-gcc" helloai.c -o helloai || exit 1# Compile FFmpegecho "Compiling FFmpeg..."gmake CC="$DJGPP_PREFIX/bin/i586-pc-msdosdjgpp-gcc" || exit 1# gmake install || exit 1echo "Compilation complete."
The following 36 issues surfaced compiling FFmpeg DJGPP 'make' cross compile, stating, "error: declaration for parameter 'XX_XXXX_XX_XXXX' but no such parameter:".
1) 'ff_log_net_error' […]
1) 'ff_log_net_error'
2) 'ff_socket'
3) 'ff_http_match_no_proxy'
4) 'ff_listen_connect'
5) 'ff_accept'
6) 'ff_listen'
7) 'ff_listen_bind'
😎 'ff_is_multicast_address'
9) 'ff_gai_strerror'
10)'ff_getnameinfo'
11) 'ff_freeaddrinfo'
12) 'ff_getaddrinfo'
13) 'sockaddr_union'
14) 'ff_network_sleep_interruptible'
15) 'ff_network_wait_fd_timeout'
16) 'ff_network_wait_fd'
17) 'ff_tls_deinit'
18) 'ff_tls_init'
19) 'ff_network_close'
20) 'ff_network_init'
21) 'ff_socket_nonblock'
22) 'ff_connect_parallel'
23) 'ff_log_net_error'
24) 'ff_socket'
25) 'ff_http_match_no_proxy'
26) 'ff_listen_connect'
27) 'ff_accept'
28) 'ff_listen'
29)'ff_listen_bind'
30) 'ff_is_multicast_address'
31) 'ff_gai_strerror'
32) 'ff_getnameinfo'
33) 'ff_freeaddrinfo'
34) 'ff_getaddrinfo'
35) 'sockaddr_union'
36) 'ff_network_sleep_interruptible'
The 'no such parameter', observed in 'libavformat/network.h', has now shown up in
'/libavformat/avio.c':
libavformat/avio.c:57:23: error: declaration for parameter 'options' but no such parameter
libavformat/avio.c:64:15: error: declaration for parameter 'ffurl_context_class' but no such parameter
// libavformat/avio.c#include "libavutil/avstring.h"#include "libavutil/dict.h"#include "libavutil/opt.h"#include "libavutil/time.h"#include "libavutil/avassert.h"#include "os_support.h"#include "avformat.h"#include "internal.h"#if CONFIG_NETWORK#include "network.h"#endif#include "url.h"/** @name Logging context. *//*@{*/static const char *urlcontext_to_name(void *ptr){URLContext *h = (URLContext *)ptr;if (h->prot)return h->prot->name;elsereturn "NULL";}static void *urlcontext_child_next(void *obj, void *prev){URLContext *h = obj;if (!prev && h->priv_data && h->prot->priv_data_class)return h->priv_data;return NULL;}#define OFFSET(x) offsetof(URLContext,x)#define E AV_OPT_FLAG_ENCODING_PARAM#define D AV_OPT_FLAG_DECODING_PARAMstatic const AVOption options[] = { // L57:23{"protocol_whitelist", "List of protocols that are allowed to be used", OFFSET(protocol_whitelist), AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, D },{"protocol_blacklist", "List of protocols that are not allowed to be used", OFFSET(protocol_blacklist), AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, D },{"rw_timeout", "Timeout for IO operations (in microseconds)", offsetof(URLContext, rw_timeout), AV_OPT_TYPE_INT64, { .i64 = 0 }, 0, INT64_MAX, AV_OPT_FLAG_ENCODING_PARAM | AV_OPT_FLAG_DECODING_PARAM },{ NULL }};const AVClass ffurl_context_class = { // L64:15.class_name = "URLContext",.item_name = urlcontext_to_name,.option = options,.version = LIBAVUTIL_VERSION_INT,.child_next = urlcontext_child_next,#if FF_API_CHILD_CLASS_NEXT.child_class_next = ff_urlcontext_child_class_next,#endif.child_class_iterate = ff_urlcontext_child_class_iterate,};/*@}*/
This same source code compiled on mac's clang compiler, however, GCC cross compiler is a different story. Therefore, please explain the root cause inhibiting make build of FFmpeg, thanks!