Wednesday 8 November 2017

Physfs Binary Options


He intentado construir esencialmente la biblioteca de PhysFS con Cmake, lo que utilizé era Code :: Blocks mingw makefiles. Puedo importar en mi proyecto, puedo declarar técnicamente la función PhysFSinit () (aunque eso me da demasiado pocos argumentos de error) pero cuando agrego un argumento me dice PHYSFSinit es una referencia indefinida. Eso suena tan tonto para mí, ¿cómo puedes reconocerlo cuando no tiene argumento, pero fingir que no existe cuando agrego un argumento Ive ejecutar CMake dos veces, pero Im simplemente conseguir esto: El código, si es necesario (sólo un poco, el Resto es irrelevante): ¿Por qué sucede esto? ¿Qué debo hacer para poder utilizar PhysFS en mi proyecto? He construido la biblioteca con CMake, he incluido la biblioteca que necesito, y he intentado inicializar PhysFS, que me dio un error que Me hace sentir como la forma C compila programa es tonto. Esta es una explicación general de cómo funcionan las bibliotecas C: PHYSFS probablemente consta de archivos de encabezado y una biblioteca estática / dinámica. El archivo de encabezado es donde se declaran todas las funciones / clases de la biblioteca, pero no se definen. Por lo tanto, cuando se incluye el archivo de encabezado en su proyecto, su compilador ahora puede saber que las funciones que usted llama en la biblioteca existen, y exactamente qué tipo de parámetros que toman etc Así que para utilizar una biblioteca, debe incluir sus archivos de cabecera, Lo que significa que debe agregar su directorio de inclusión al proyecto / cmakelists. txt. Ahora, cuando realmente vincula el ejecutable a un binario, estas funciones deben resolverse para que el vinculador sepa dónde están en realidad, para que puedan ser llamados. Esto se llama vinculación con la biblioteca. Así que para usar una biblioteca debe vincular sus archivos de biblioteca. En cmake esto se hace de la siguiente manera: No estoy muy familiarizado con PHYSFS, pero si lo compiló como una biblioteca, debería tener uno de estos archivos para enlazar. Referencia indefinida a PHYSFSinit Este es un problema con la vinculación y normalmente significa que falló en vincular la biblioteca, o la biblioteca no tiene la implementación de esta función. Vincular la biblioteca debe arreglar esto. He leído mal su pregunta, y asumí que estaba utilizando cmake con su proyecto y vinculación a PHYSFS. Primero debes construir PHYSFS por separado, lo que producirá un archivo de biblioteca (.a,.so o. lib) dependiendo de la plataforma / IDE, entonces debes vincular ese archivo de biblioteca en tus opciones de vinculador C :: B. Vaya a las opciones de Project-Build. Haga clic en Configuración del vinculador. Añadir la biblioteca. Los paquetes binarios Los paquetes binarios contienen la biblioteca completa de Allegro con todos sus complementos y dependencias de terceros. Cada paquete está diseñado para funcionar con una versión de compilador particular. Debe descargar la versión para su compilador. Los compiladores compatibles son: Si el compilador que usa no está en la lista, entonces tendrá que construir Allegro usted mismo. El paquete binario contiene tres carpetas. La carpeta include contiene todos los archivos de encabezado. Tenga en cuenta que los archivos de encabezado son específicos para el compilador y su versión, y por lo tanto no son compatibles con otros compiladores. La carpeta lib contiene las bibliotecas que necesitará vincular. Ésos también trabajan solamente para el compilador particular que se designan para. La carpeta bin contiene los distintos archivos DLL de los que dependerá su programa (si no tiene vínculo estático). Comprensión de los complementos de Allegro 5 Allegro 5 es modular y, como tal, debe vincularse a una variedad de bibliotecas diferentes en función de la funcionalidad que utilice. Las librerías actuales son: allegro - las funciones principales allegromain - una compatibilidad libarary que permite a int main () trabajar en todos los compiladores. No confunda esto con la biblioteca de allegro base. No incluye ninguna funcionalidad. Sólo se requiere en OS X. allegroacodec - codecs de audio (por ejemplo, OGG) allegroaudio - el subsistema de audio básico allegrocolor - conversión entre varios formatos de color allegrodialog - cuadros de diálogo nativos (por ejemplo, Open File) allegrofont - fuentes de mapa de bits básicas allegroimage - , PNG) allegromemfile - una interfaz para cargar archivos de memoria allegrophysfs - una interfaz para cargar archivos desde ubicaciones abstractas (por ejemplo, un archivo ZIP) allegroprimitives - funciones básicas de dibujo (por ejemplo rectángulos, líneas) allegrottf - cargar fuentes TTF Algunas de las bibliotecas dependen El uno al otro. Consulte la guía de introducción para obtener más detalles. Convenciones de nombres de biblioteca Los paquetes binarios contienen cada uno de esos complementos en una variedad de formatos. Esto conduce a un sistema de nomenclatura muy detallado que se ve así: Las bibliotecas de complementos que utilice deben coincidir con el tipo de compilación de la biblioteca Allegro de base con la que se vincule. Las librerías de terceros (por ejemplo, libogg) son todas versiones estáticas, pero todavía debe usar la misma compilación mt / md. Dinámico, estático o monolítico Si la biblioteca no incluye - static o - monolith, entonces es la versión dinámica. Esto significa que el ejecutable dependerá del archivo DLL correspondiente en la carpeta bin. Como tal, debe incluir los DLL al distribuir su proyecto. La versión estática significa que la DLL no es necesaria. No todos los compiladores admiten esta opción. Al usar la versión estática de Allegro debe definir ALLEGROSTATICLINK antes de incluir cualquier encabezado Allegro. La versión monolítica es una versión de Allegro de talla única. Cuando vinculas contra el allegro-monolito, no necesitas vincularte a ninguna otra biblioteca de Allegro. (Y así no hay tal cosa como allegromodule-monolith.) El monolito construir también puede ser estático si es así, las mismas cosas mencionadas anteriormente con respecto a la construcción estática se aplican a ella. MT vs MD Estas opciones afectan a cómo el compilador enlaza con la biblioteca C estándar. La versión MT lo incluye como parte del ejecutable. La versión de MD lo deja fuera y requiere que también incluya los DLL de sistema apropiados cuando distribuya su programa. Release vs Debug Las compilaciones marcadas como debug están destinadas a la depuración. Se recomienda que utilice depuración cuando esté probando y desarrollando su proyecto. Al distribuir su programa, debe utilizar las compilaciones estándar sin depuración. Configuración de su IDEPhysicsFS 2.1.0 La última versión de PhysicsFS se puede encontrar en: icculus. org/physfs/ PhysicsFS una abstracción portátil y flexible de archivos. Esta API le da acceso a un sistema de archivos del sistema de maneras superiores a las llamadas de e / o de stdio o de sistema. Los beneficios breves: Su portátil. Es seguro. No se permite el acceso a archivos fuera de los directorios especificados. Es flexible. Archivos (archivos. ZIP) se pueden utilizar de forma transparente como estructuras de directorios. Este sistema se inspira en gran medida en los archivos PK3 de Quake 3s y en los fv cvars relacionados. Si has jugado con estos, entonces esta API te será familiar. Con PhysicsFS, tiene un único directorio de escritura y varios directorios (la ruta de búsqueda) para leer. Se puede pensar en esto como un sistema de archivos dentro de un sistema de archivos. Si (en Windows) usted fijara el directorio de la escritura a C: MyGameMyWritingDirectory, entonces ningunas llamadas de PHYSFS podrían tocar cualquier cosa sobre este directorio, incluyendo los directorios de C: MyGame y de C :. Esto evita que un lenguaje interno de scripting de aplicaciones de piddling sobre c: config. sys, por ejemplo. Si prefiere que PHYSFS tenga acceso completo al sistema de archivos REAL del sistema, establezca el directorio de escritura en C :, pero eso es generalmente una mala cosa por varias razones. Las letras de unidad se ocultan en PhysicsFS una vez que haya configurado sus rutas iniciales. La ruta de búsqueda crea una estructura de directorios jerárquica única. Esto no sólo se presta bien a la abstracción general con archivos, sino que también da un mejor soporte a los sistemas operativos como MacOS y Unix. Por lo general, no deberías nunca codificar una letra de unidad no sólo esto dañaría la portabilidad a los sistemas operativos no Microsoft, sino que limita a tus usuarios de win32 a una sola unidad, también. Utilice las funciones de abstracción de PhysicsFS y permita también opciones de configuración definidas por el usuario. Al abrir un archivo, lo especificas como si estuviera en un sistema de archivos Unix: si quieres escribir en C: MyGameMyConfigFilesgame. cfg, puedes establecer el directorio de escritura en C: MyGame y luego abrir MyConfigFiles / game. cfg. Esto da una abstracción en todas las plataformas. Especificar un archivo de esta manera se denomina notación independiente de la plataforma en esta documentación. Especificar un nombre de archivo en un formulario como C: mydirmyfile o unidad de disco duro de MacOS: Mi directorio: Mi archivo se denomina notación dependiente de la plataforma. La única vez que se utiliza la notación dependiente de la plataforma es cuando se configura el directorio de escritura y la ruta de búsqueda después de eso, todo el acceso a los archivos en esos directorios se realiza con la notación independiente de la plataforma. Todos los archivos abiertos para escritura se abren en relación con el directorio de escritura, que es la raíz del sistema de archivos que se puede escribir. Al abrir un archivo para leer, PhysicsFS pasa por la ruta de búsqueda. Esto NO es lo mismo que la variable de entorno PATH. Una aplicación que utiliza PhysicsFS especifica los directorios que se deben buscar, que pueden ser directorios reales, o archivar archivos que contengan archivos y subdirectorios propios. Consulte el final de estos documentos para los formatos de archivo de archivo compatibles actualmente. Una vez definida la ruta de búsqueda, puede abrir archivos para su lectura. Si tienes la siguiente ruta de búsqueda definida (para usar un ejemplo de win32 de nuevo): C: mygame C: mygamemyuserfiles D: mygamescdromdatafiles C: mygameinstalleddatafiles. zip Entonces una llamada a PHYSFSopenRead (textfiles / myfile. txt) De la letra de la unidad y la falta de separador de dir al principio de la cadena, esto es notación independiente de la plataforma) buscará C: mygametextfilesmyfile. txt, luego C: mygamemyuserfilestextfilesmyfile. txt, luego D: mygamescdromdatafilestextfilesmyfile. txt, y finalmente, para Textfilesmyfile. txt dentro de C: mygameinstalleddatafiles. zip. Recuerde que la mayoría de los tipos de archivo y los sistemas de archivos de la plataforma almacenan sus nombres de archivo en una forma que distingue entre mayúsculas y minúsculas, por lo que debe tener cuidado de especificarlo correctamente. Los archivos abiertos a través de PhysicsFS no pueden contener. O .. o: como elementos dir. No sólo no tienen sentido en MacOS Classic y / o Unix, sino que son un agujero de seguridad. Además, los enlaces simbólicos (que se pueden encontrar en algunos tipos de archivos y directamente en el sistema de archivos en plataformas Unix) NO se siguen hasta que se llama PHYSFSpermitSymbolicLinks (). Eso se deja a su propia discreción, ya que después de un enlace simbólico puede permitir el acceso fuera del directorio de escritura y las rutas de búsqueda. Para la portabilidad, no hay ningún mecanismo para crear nuevos enlaces simbólicos en PhysicsFS. El directorio de escritura no está incluido en la ruta de búsqueda, a menos que lo agregue específicamente. Mientras que usted puede cambiar el dir de la escritura tantas veces como usted tiene gusto, usted debe probablemente fijarlo una vez y pegarse a él. Recuerde que su programa no tendrá permiso para escribir en todos los directorios de los sistemas Unix y NT. Todos los archivos se abren en modo binario, no hay conversión de finalización para archivos de texto. Aparte de eso, PhysicsFS tiene algunas funciones de conveniencia para la independencia de la plataforma. Hay una función para indicarle el separador de dir de plataformas actual (en windows, / en Unix,: en MacOS), que sólo se necesita para configurar sus rutas de búsqueda / escritura. Hay una función para indicarle qué unidades de CD-ROM contienen discos accesibles, y una función para recomendar una buena ruta de búsqueda, etc. Un pedido recomendado para la ruta de búsqueda es el directorio de escritura, luego el directorio de base y luego el directorio de cdrom, Entonces cualquier archivo descubierto. Quake 3 hace algo como esto, pero mueve los archivos al inicio de la ruta de búsqueda. Los juegos de Build Engine, como Duke Nukem 3D y Blood, colocan los archivos en último lugar y usan el directorio base para buscar y escribir. Hay una función auxiliar (PHYSFSsetSaneConfig ()) que agrupa una configuración básica para usted, basada en algunos parámetros. También vea los comentarios en PHYSFSgetBaseDir (). Y PHYSFSgetPrefDir () para obtener información sobre cuáles son y cómo pueden ayudarlo a determinar una ruta de búsqueda óptima. PhysicsFS 2.0 agrega el concepto de montar archivos a puntos arbitrarios en la ruta de búsqueda. Si un archivo zip contiene maps / level. map y monta ese archivo en mods / mymod, entonces tendrías que abrir mods / mymod / maps / level. map para acceder al archivo, aunque mods / mymod no esté realmente especificado en el archivo. archivo zip. A diferencia de la mentalidad de Unix de montar un sistema de archivos, mods / mymod doesnt realmente tiene que existir al montar el zipfile. Es un directorio virtual. El mecanismo de montaje permite al desarrollador separar archivos en el árbol y evitar pisotear archivos cuando se agregan nuevos archivos, como incluir soporte de mod en un juego. Mantener el contenido externo en una correa estrecha de esta manera puede ser de suma importancia para algunas aplicaciones. PhysicsFS es principalmente hilo seguro. Los mensajes de error devueltos por PHYSFSgetLastError () son únicos por subproceso y las funciones de configuración de biblioteca-estado son mutexd. Para mayor eficiencia, los accesos de archivos individuales no están bloqueados, por lo que no puede leer / escribir / buscar / cerrar / etc con seguridad el mismo archivo de dos subprocesos al mismo tiempo. Otras condiciones de carrera son bugs que deben ser reportados / parcheados. Mientras puede usar el acceso a archivos stdio / syscall en un programa que tiene llamadas PHYSFS, no se recomienda hacerlo, y no puede utilizar los manejadores de archivos del sistema con PhysicsFS y viceversa. Tenga en cuenta que los archivos no necesitan ser nombrados como tales: si tiene un archivo ZIP y lo cambia con una extensión. PKG, PhysicsFS seguirá reconociendo el archivo como archivo ZIP. El contenido de los archivos se utiliza para determinar su tipo cuando sea posible. Tipos de archivo soportados actualmente:.ZIP (pkZip / WinZip / Info-ZIP compatible) .7Z (archivos de 7zip).ISO (archivos ISO9660, imágenes de CD-ROM).GRP (Archivos de archivos de grupo de Build Engine).PAK (archivo Quake I / II) ) Archivos de archivos. MVL (Descent II movielib).WAD (Archivos del motor DOOM) Política de cadenas para PhysicsFS 2.0 y posteriores: PhysicsFS 1.0 sólo podría tratar con cadenas ASCII terminadas en nulo. Todos los caracteres ASCII altos resultaron en un comportamiento indefinido, y no había ningún soporte Unicode en absoluto. PhysicsFS 2.0 admite Unicode sin romper la compatibilidad binaria con la API 1.0 mediante la codificación UTF-8 de todas las cadenas pasadas dentro y fuera de la biblioteca. Todas las cadenas pasadas a través de PhysicsFS están en formato UTF-8 terminado en nulo. Esto significa que si todo lo que te importa es Inglés (caracteres ASCII lt 127), entonces sólo utiliza las cadenas C regulares. Si te interesa Unicode (y deberías), entonces necesitas averiguar qué quiere, necesita y ofrece tu plataforma. Si está en Windows antes de Win2000 y construye con soporte Unicode, las cadenas TCHAR son dos bytes por carácter (esto se llama codificación UCS-2). Cualquier Windows moderno utiliza UTF-16, que es dos bytes por carácter para la mayoría de los caracteres, pero algunos caracteres son cuatro. Debes convertirlos a UTF-8 antes de entregarlos a PhysicsFS con PHYSFSutf8FromUtf16 (). Que maneja tanto UTF-16 como UCS-2. Si está usando Unix o Mac OS X, las cadenas wchart son cuatro bytes por carácter (codificación UCS-4). Utilice PHYSFSutf8FromUcs4 (). Mac OS X puede darle UTF-8 directamente desde una cadena CFString o NSString, y muchas Unixes generalmente le dan cadenas C en formato UTF-8 en todas partes. Si tiene un conjunto de caracteres ASCII de un solo byte, como tantos códigos europeos, puede que no tenga suerte. Bien convertir de Latin1 a UTF-8 sólo, y nunca volver a Latin1. Si está por encima de ASCII 127, todas las apuestas están desactivadas: mueva a Unicode o utilice las instalaciones de su plataforma. Pasar una cadena C con datos ASCII alto que no es UTF-8 codificado NO hará lo que usted espera Naturalmente, theres también PHYSFSutf8ToUcs2 (). PHYSFSutf8ToUtf16 (). Y PHYSFSutf8ToUcs4 () para obtener datos de nuevo en un formato que te gusta. Entre bastidores, PhysicsFS utilizará Unicode siempre que sea posible: las cadenas UTF-8 en Windows se convertirán y se utilizarán con las API de Windows de varios bytes, por ejemplo. PhysicsFS ofrece soporte de conversión de codificación básica, pero no una biblioteca de cadenas completas. Consigue tus cosas en cualquier formato con el que puedas trabajar. Todas las plataformas soportadas por PhysicsFS 2.1 y posteriores admiten completamente Unicode. Hemos caído plataformas que no (OS / 2, Mac OS 9, Windows 95, etc), como incluso un sistema operativo que es más de una década de edad se debe esperar para manejar este bien. Si tiene que soportar una de estas plataformas, debe usar una versión anterior de PhysicsFS. Muchos archiveros específicos del juego están seriamente desprevenidos para Unicode (por ejemplo, los archivadores de Descent HOG / MVL y Build Engine GRP, por ejemplo, sólo ofrecen un nombre de archivo DOS 8.3). No se puede hacer nada por esto, pero tienden a ser formatos heredados para el contenido existente que era todo ASCII (y por lo tanto, UTF-8 válido) de todos modos. Otros formatos, como. ZIP, no ofrecen explícitamente soporte Unicode, pero de manera extraoficial esperan que los nombres de archivo estén codificados en UTF-8 y, por tanto, Just Work. La mayoría de todo hace lo correcto sin molestarle, pero es bueno ser consciente de estos matices en caso de que no. Consulte el archivo LICENSE. txt en el directorio raíz de fuentes para obtener los derechos de licencia y redistribución. Consulte el archivo CREDITS. txt en el directorio docs de fuentes para obtener una lista más o menos completa de los responsables de esto. Autor: Ryan C. Gordon. Generado el Sáb Mar 24 15:06:35 2012 para physfs por 1.6.3

No comments:

Post a Comment