ca80d5127e
The --default-symver linker option attaches a default version definition (the SONAME) to every exported symbol. It is supported since at least GNU binutils 2.22 in 2011 (older versions not tested). With this version definition, newly-linked binaries that depend on the jansson shared library will refer to its symbols in a versioned form, preventing their references from being resolved to a symbol of the same name exported by json-c or json-glib if those libraries appear in dependency search order before jansson, which will usually result in a crash. This is necessary because ELF symbol resolution normally uses a single flat namespace, not a tree like Windows symbol resolution. At least one symbol (json_object_iter_next()) is exported by all three JSON libraries. Linking with -Bsymbolic is not enough to have this effect in all cases, because -Bsymbolic only affects symbol lookup within a shared object, for example when parse_json() calls json_decref(). It does not affect calls from external code into jansson, unless jansson was statically linked into the external caller. This change will also not prevent code that depends on json-c or json-glib from finding jansson's symbols and crashing; to prevent that, a corresponding change in json-c or json-glib would be needed. Adding a symbol-version is a backwards-compatible change, but once added, removing or changing the symbol-version would be an incompatible change that requires a SONAME bump. Resolves: https://github.com/akheron/jansson/issues/523 (when combined with an equivalent change to json-c). Signed-off-by: Simon McVittie <smcv@collabora.com> |
||
---|---|---|
android | ||
cmake | ||
doc | ||
examples | ||
scripts | ||
src | ||
test | ||
.clang-format | ||
.gitignore | ||
.travis.yml | ||
Android.mk | ||
appveyor.yml | ||
CHANGES | ||
CleanSpec.mk | ||
CMakeLists.txt | ||
configure.ac | ||
jansson.pc.in | ||
LICENSE | ||
Makefile.am | ||
README.rst | ||
release.sh |
Jansson README ============== .. image:: https://travis-ci.org/akheron/jansson.png :target: https://travis-ci.org/akheron/jansson .. image:: https://ci.appveyor.com/api/projects/status/lmhkkc4q8cwc65ko :target: https://ci.appveyor.com/project/akheron/jansson .. image:: https://coveralls.io/repos/akheron/jansson/badge.png?branch=master :target: https://coveralls.io/r/akheron/jansson?branch=master Jansson_ is a C library for encoding, decoding and manipulating JSON data. Its main features and design principles are: - Simple and intuitive API and data model - `Comprehensive documentation`_ - No dependencies on other libraries - Full Unicode support (UTF-8) - Extensive test suite Jansson is licensed under the `MIT license`_; see LICENSE in the source distribution for details. Compilation and Installation ---------------------------- You can download and install Jansson using the `vcpkg <https://github.com/Microsoft/vcpkg/>`_ dependency manager: .. code-block:: bash git clone https://github.com/Microsoft/vcpkg.git cd vcpkg ./bootstrap-vcpkg.sh ./vcpkg integrate install vcpkg install jansson The Jansson port in vcpkg is kept up to date by Microsoft team members and community contributors. If the version is out of date, please `create an issue or pull request <https://github.com/Microsoft/vcpkg/>`_ on the vcpkg repository. If you obtained a `source tarball`_ from the "Releases" section of the main site just use the standard autotools commands:: $ ./configure $ make $ make install To run the test suite, invoke:: $ make check If the source has been checked out from a Git repository, the ./configure script has to be generated first. The easiest way is to use autoreconf:: $ autoreconf -i Documentation ------------- Documentation is available at http://jansson.readthedocs.io/en/latest/. The documentation source is in the ``doc/`` subdirectory. To generate HTML documentation, invoke:: $ make html Then, point your browser to ``doc/_build/html/index.html``. Sphinx_ 1.0 or newer is required to generate the documentation. .. _Jansson: http://www.digip.org/jansson/ .. _`Comprehensive documentation`: http://jansson.readthedocs.io/en/latest/ .. _`MIT license`: http://www.opensource.org/licenses/mit-license.php .. _`source tarball`: http://www.digip.org/jansson#releases .. _Sphinx: http://sphinx.pocoo.org/