es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Mensaje de error de Android Studio: Uso de un identificador no declarado ‘accept4’

La carpeta jni no aparece en android studio y después de compilar, solo se compila la carpeta java.

CARPETA PRINCIPAL DESDE EL EXPLORADOR

CARPETA PRINCIPAL DESDE ANDROID STUDIO

Como puedes ver, la carpeta jni aparece en el explorador pero no dentro de Android Studio.

EDICIÓN:
Así que después de agregar esto en mi build.gradle

externalNativeBuild {
    ndkBuild {
        path 'src/main/jni/Android.mk'
    }
}

la carpeta jni apareció como nombre de la carpeta cpp, pero cuando compilo, obtengo este error de SocketServer.cpp:

> uso de identificador no declarado 'accept4'

Este es el código:

bool SocketServer::Accept() {
    if ((acceptfd = accept4(listenfd, nullptr, nullptr, SOCK_CLOEXEC)) < 0) {
        Close();
        return false;
    }
    return true;
}

y los encabezados ya están incluidos:

cpp
#include <sys types.h="">
#include <sys socket.h="">

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Si la carpeta jni no aparece en Android Studio y solo se compila la carpeta java después de compilar, puede ser porque el proyecto no está configurado correctamente para incluir código nativo.

    Una solución podría ser agregar lo siguiente al archivo build.gradle:

    externalNativeBuild {
    ndkBuild {
    path 'src/main/jni/Android.mk' //cambia esta ruta a la ubicación de tu propio archivo Android.mk
    }
    }

    Después de agregar este fragmento de código, la carpeta jni debería aparecer como un nombre de carpeta cpp en Android Studio. Sin embargo, es posible que el código aún produzca un error como “uso de identificador no declarado ‘accept4′” en el archivo SocketServer.cpp.

    Para solucionar este error, asegúrate de que se incluyan los encabezados necesarios en el código. En este caso, los encabezados para sys/types.h y sys/socket.h ya deberían estar incluidos en el archivo.

    Si el error persiste, es posible que el dispositivo o emulador que se esté utilizando no admita la función accept4(). En ese caso, puede ser necesario utilizar un enfoque alternativo.

Comments are closed.