[FFmpeg-user] DJGPP Cross Compiler 12.2.0 Fails to Recognize Parameters in FFmpeg Source Code
rubean
pfourier at q.com
Sun Feb 25 13:13:42 EET 2024
> RE:
> ffmpeg-4.4
>
> DJGPP CROSS COMPILER, GCC v12.2.0
>
link <https://github.com/andrewwutw/build-djgpp>
link <https://ffmpeg.org/platform.html#DOS>
>
> host
> macbook pro, macOS Monterey
>
"DJGPP Cross Compiler 12.2.0 Fails to Recognize Parameters in FFmpeg Source Code"
Hi,
I am using the 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 compiler
export DJGPP_PREFIX="/Users/owner/djcc"
# export DJGPP_PREFIX=${DJGPP_PREFIX-/Users/owner/djcc}
export DJGPP_PREFIX2=${DJGPP_PREFIX2-/Users/owner/ffcc}
# export
DJGPP_PREFIX3=${DJGPP_PREFIX3-/Users/owner/Documents/DOSBox/NET/watt}
# system path
export PATH="$DJGPP_PREFIX/bin:$PATH"
# Your cross compilation target
TARGET_ARCH="$DJGPP_PREFIX/bin/i586-pc-msdosdjgpp"
# set C_INCLUDE_PATH environment variable
export C_INCLUDE_PATH="#DJGPP_PREFIX/i586-pc-msdosdjgpp/sys-include"
# Download FFmpeg source code
FFMPEG_VERSION="4.4"
FFMPEG_ARCHIVE="https://ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.gz"
FFMPEG_SOURCE_DIR="ffmpeg-${FFMPEG_VERSION}"
# Download FFmpeg source
echo "Downloading FFmpeg source..."
wget -c "$FFMPEG_ARCHIVE" || exit 1
tar -xf "ffmpeg-${FFMPEG_VERSION}.tar.gz" || exit 1
cd "$FFMPEG_SOURCE_DIR" || exit 1
# clean debri
gmake clean
# Redirect both stdout and stderr to separate .err files
exec > >(tee -ia gcca.txt) 2> >(tee -ia gcc_err.err >&2)
# Configure FFmpeg for cross-compilation
echo "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 testing
echo "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 FFmpeg
echo "Compiling FFmpeg..."
gmake CC="$DJGPP_PREFIX/bin/i586-pc-msdosdjgpp-gcc" || exit 1
# gmake install || exit 1
echo "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'
2) 'ff_socket'
3) 'ff_http_match_no_proxy'
4) 'ff_listen_connect'
5) 'ff_accept'
6) 'ff_listen'
7) 'ff_listen_bind'
8) '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
"
Therefore, please explain the root cause . . .
***
// 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;
else
return "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_PARAM
static 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,
};
/*@}*/
More information about the ffmpeg-user
mailing list