[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