diff --git a/rpython/translator/platform/darwin.py b/rpython/translator/platform/darwin.py
index 628c26a..f21cf16 100644
--- a/rpython/translator/platform/darwin.py
+++ b/rpython/translator/platform/darwin.py
@@ -30,9 +30,9 @@ class Darwin(posix.BasePosix):
             print 'in get_rpath_flags, rel_libdirs is not fixed up',rel_libdirs
         return self.rpath_flags
 
-    def _args_for_shared(self, args):
+    def _args_for_shared(self, args, target='$(TARGET)'):
         return (list(self.shared_only)
-                + ['-dynamiclib', '-install_name', '@rpath/$(TARGET)', '-undefined', 'dynamic_lookup', '-flat_namespace']
+                + ['-dynamiclib', '-install_name', '@rpath/' + target, '-undefined', 'dynamic_lookup', '-flat_namespace']
                 + args)
 
     def _include_dirs_for_libffi(self):
diff --git a/rpython/translator/platform/posix.py b/rpython/translator/platform/posix.py
index cafc9b1..49177df 100644
--- a/rpython/translator/platform/posix.py
+++ b/rpython/translator/platform/posix.py
@@ -15,6 +15,7 @@ class BasePosix(Platform):
 
     DEFAULT_CC = 'gcc'
     rpath_flags = ['-Wl,-rpath=\'$$ORIGIN/\'']
+    so_prefixes = ('lib', '')
 
     def __init__(self, cc=None):
         self.cc = cc or os.environ.get('CC', self.DEFAULT_CC)
@@ -53,7 +54,7 @@ class BasePosix(Platform):
         args = [str(ofile) for ofile in ofiles] + link_args
         args += ['-o', str(exe_name)]
         if not standalone:
-            args = self._args_for_shared(args)
+            args = self._args_for_shared(args, exe_name.basename)
         self._execute_c_compiler(cc, args, exe_name,
                                  cwd=str(exe_name.dirpath()))
         return exe_name
