HaikuPorts
  • Login
  • Preferences
  • Help/Guide
  • Wiki
  • Timeline
  • Roadmap
  • View Tickets
  • Search
  • Port Log
  • Blog
wiki:CommonProblems

Context Navigation

  • ← Previous Version
  • View Latest Version
  • Next Version →


Version 41 (modified by mmu_man, 5 years ago) (diff)

Note on mangled symbols in network libs; also mention libbind for BONE.

Common Porting Problems

This page serves to collect information about common problems encountered when porting applications/libraries to the Haiku/BeOS platform. The problems should be identified by the (compiler) errors that typify them.

Information about BeOS's POSIX compatibility, see BeOSPosix.

No /usr

Just like BeOS, Haiku does not have /usr. Attempts to install things to /usr will usually fail and leave empty folders, because rootfs only allows creating directories, not regular files.

A quick hack is to create a usr somewhere and symlink to /usr, but it is discouraged.

The proper fix is to use --prefix=/boot/common (or make sure it defaults to /boot/common for Haiku).

no undefined references allowed in i586-pc-beos shared libraries

ports: dev-util/subversion, dev-libs/apr

You need to pass the -no-undefined option to libtool

Alternatively, libtool can be patched to always exhibit this behavior, at the risk of breaking static compilation when dynamic linking fails. -- andreasf

(stat) structure has no member named `st_blocks' (Now fixed in Haiku)

ports: app-arch/tar (make check), net-fs/samba?, dev-util/cvs

The stat struct in sys/stat.h in BeOS and Haiku ( Haiku now has it  as seen here) doesn't have an st_blocks member. In projects with autoconf, you can check for HAVE_STAT_ST_BLOCKS.

 http://lists.samba.org/archive/samba-technical/2005-January/039275.html

-lm

ports: dev-lang/lua, others

The -lm refers to libm which isn't needed for Haiku or BeOS as the math library is part of libroot and linked by default

Please DO NOT create a shortcut of libroot.so and rename to libm.so on gcc4 and gcc2 lib directory (Haiku hybrids case) or change the -lm references in the configure file to -lroot. If the port is using the autotools chances are this can be fixed by doing an AC_CHECK_LIB for cos in m and then setting a variable such as LIBM or MLIB to by ="-lm" if true or "" if not.

Here is some explanation:  http://www.freelists.org/archives/haiku-development/04-2008/msg00904.html

-lc

This sometimes turns up, and I think it is due to the port using an older libtool. Try running libtoolize --force --copy --install, aclocal, autoconf and automake before ./configure to see if that clears it up.

conflicting types for `restrict' (Now fixed in Haiku)

/boot/develop/headers/posix/search.h:35: conflicting types for `restrict' /boot/develop/headers/posix/search.h:35: previous declaration of `restrict' This seems to be an issue with Haiku and has been reported  Haiku-2262 This has been fixed in Haiku. If using a version prior to the fix you can copy the search.h file over the one in your headers/posix folder.

GCC 2.9 related build problems

output_operand_lossage `invalid expression as operand'

This can be avoided by not passing the '-g' option to gcc for this test.

GCC 4.3 related build problems

Typical errors look like these:

error: 'find' is not a member of 'std'

error: 'exit' was not declared in this scope

Please take a look at:  http://www.cyrius.com/journal/2007/05/10#gcc-4.3-include

or

 http://www.comp.leeds.ac.uk/hannah/cpp/errors.html

MSG_NOSIGNAL undeclared

Add below to header/source file.

#ifndef MSG_NOSIGNAL 
#define MSG_NOSIGNAL 0 
#endif

FNDELAY undeclared

Add below to header/source file.

#ifndef FNDELAY
#define FNDELAY O_NONBLOCK 
#endif

O_NOATIME undeclared

Add below to header/source file.

#include <fcntl.h>
#ifndef _GNU_SOURCE
#define _GNU_SOURCE // for O_NOATIME
#define O_NOATIME 01000000
#endif

stdbool.in.h (Now fixed in Haiku)

This has been fixed: http://ports.haiku-files.org/wiki/dev-libs/gnulib So any releases posted AFTER May 25, 2008 'should' include an updated stdbool.in.h

iconv (Now fixed in Haiku))

Iconv is included in Haiku, but many times ./configure does not detect and use it. This is because it is in libtextencoding.so ( should be fixed now). So try adding a check for iconv in libtextextencoding and see if that works.

Cannot find socket libraries

The socket functionalities are provided in Haiku's libnetwork. The proper fix for this is to patch Configure to check that library as well. This is an example patch of libevent.

diff -Naur libevent-1.4.13-stable/configure.in libevent-1.4.13-stable-haiku/configure.in
--- libevent-1.4.13-stable/configure.in	2009-05-24 13:37:49.000000000 +0000
+++ libevent-1.4.13-stable-haiku/configure.in	2009-05-28 16:55:17.000000000 +0000
@@ -33,7 +33,7 @@
 AC_SUBST(LIBTOOL_DEPS)

 dnl Checks for libraries.
-AC_CHECK_LIB(socket, socket)
+AC_SEARCH_LIBS(socket, socket network)
 AC_CHECK_LIB(resolv, inet_aton)
 AC_CHECK_LIB(rt, clock_gettime)
 AC_CHECK_LIB(nsl, inet_ntoa)

Also note BeOS (BONE) needs libsocket and libbind instead.

Also, Both libbind (on BeOS) and libnetwork (on Haiku) have some usual symbols mangled with a prepended underscore (or 2), so typically a test for inet_aton like above changed to AC_SEARCH_LIBS(inet_aton, resolv bind) will fail to find libbind (which exports it as __inet_aton). This is because headers use preprocessor defines to make inet_aton() available, and the linking checks done by autoconf does not include the proper headers. This can be fixed by checking for another (unmangled) symbol. You will want to contact the project to ask for guidance here.

Missing syslog()

On BeOS, syslog() is in libbe, so one must AC_SEARCH_LIBS(syslog, be). It's in libroot on Haiku so it shouldn't need any check.

DT_DIR undeclared

The use of DT_DIR doesn't work on non-ext* filesystems

So replace for

#ifndef DT_DIR
/* dirent.d_type is a BSD extension, not part of POSIX */
#include <sys/stat.h>
#include <string.h>

static int
is_dir (const char *path, const char *name)
{
  int len1 = strlen(path);
  int len2 = strlen(name);

  char pathname[len1 + 1 + len2 + 1 + 13];
  strcpy (pathname, path);

  /* Avoid UNC-path "//name" on Cygwin.  */
  if (len1 > 0 && pathname[len1 - 1] != '/')
    strcat (pathname, "/");

  strcat (pathname, name);

  struct stat st;
  if (stat (pathname, &st))
    return 0;
  return S_ISDIR (st.st_mode);
}
#endif

And after a check function

info.dir = !! is_dir (path, de->d_name);

Download in other formats:

  • Plain Text

Trac Powered

Powered by Trac 0.13dev-r10686
By Edgewall Software.

Visit the Trac open source project at
http://trac.edgewall.org/