# os x linking issue with extension

- Thread: https://externals.io/message/15770
- Original archive: https://news-web.php.net/php.internals/15770
- Started by Michael Johnston on 2005-04-03T21:00:44+00:00
- Messages: 6
- Reply by email to internals@lists.php.net
- More for agents: search with https://externals.io/search.md?q={query} · JSON API at https://externals.io/api · documentation at https://externals.io/llms.txt

---

## #15770 — Michael Johnston — 2005-04-03T21:00:44+00:00

URL: https://externals.io/message/15770#15770

(I'm not sure if extension development belongs on this list, but I 
couldn't find a better one. If there is a more appropriate list, could 
someone please point me to it?)

I am working on an extension that is os x specific & relies on Carbon & 
ApplicationServices (it is a port of appscript, to allow writing 
applescript applications in php).

I used ext_skel to create an extension, and ran phpize. In the 
config.m4, I put:

   PHP_ADD_FRAMEWORK(Carbon)
   PHP_ADD_INCLUDE("/Developer/Headers/FlatCarbon")

but when I attempt to use carbon api I get an undefined symbol error 
from the dynamic linker.

looking at the configure script generated by phpize, it seemed to me 
that the PHP_ADD_FRAMEWORK macro is not actually being used to affect 
the build. I attempted to change this by manually editing the configure 
script to add $PHP_FRAMEWORKS to the arguments passed to linktool 
mode=link, and added   PHP_VAR_SUBST="$PHP_FRAMEWORKS". Using make 
--debug, I verified that linktool mode=link was now being called with 
the -framework param, but I still get the same undefined symbol error.

I don't know much about how the dynamic linker works. What do I need to 
do to have extension .so link to carbon?

I am using the 5.0.3 release source package of php, os x 10.3.8, gcc 3.3


Michael Johnston

---

## #15771 — Jeremy Johnstone — 2005-04-03T21:22:22+00:00

URL: https://externals.io/message/15770#15771 · In reply to: #15770

Although this list should be able to answer the question for you,
another list which might be of assistance/interest to you is pecl-dev.

http://pecl.php.net/support.php

-Jeremy


> (I'm not sure if extension development belongs on this list, but I
> couldn't find a better one. If there is a more appropriate list, could
> someone please point me to it?)
> 


-- 
---------------------------
Jeremy Johnstone
http://www.jeremyjohnstone.com
jsjohnst@php.net

---

## #15774 — John LeSueur — 2005-04-03T22:17:05+00:00

URL: https://externals.io/message/15770#15774 · In reply to: #15770

Michael Johnston wrote:

> (I'm not sure if extension development belongs on this list, but I 
> couldn't find a better one. If there is a more appropriate list, could 
> someone please point me to it?)
>
> I am working on an extension that is os x specific & relies on Carbon 
> & ApplicationServices (it is a port of appscript, to allow writing 
> applescript applications in php).
>
> I used ext_skel to create an extension, and ran phpize. In the 
> config.m4, I put:
>
>   PHP_ADD_FRAMEWORK(Carbon)
>   PHP_ADD_INCLUDE("/Developer/Headers/FlatCarbon")
>
> but when I attempt to use carbon api I get an undefined symbol error 
> from the dynamic linker.
>
> looking at the configure script generated by phpize, it seemed to me 
> that the PHP_ADD_FRAMEWORK macro is not actually being used to affect 
> the build. I attempted to change this by manually editing the 
> configure script to add $PHP_FRAMEWORKS to the arguments passed to 
> linktool mode=link, and added   PHP_VAR_SUBST="$PHP_FRAMEWORKS". Using 
> make --debug, I verified that linktool mode=link was now being called 
> with the -framework param, but I still get the same undefined symbol 
> error.
>
> I don't know much about how the dynamic linker works. What do I need 
> to do to have extension .so link to carbon?
>
> I am using the 5.0.3 release source package of php, os x 10.3.8, gcc 3.3
>
>
> Michael Johnston
>
You might find more help on pecl-dev. Specifically gabe has written some 
config.m4 stuff for osx that uses php_ADD_FRAMEWORK(). It's in the 
php_zeroconf extension.

John LeSueur

---

## #15804 — Justin Hannus — 2005-04-05T01:35:58+00:00

URL: https://externals.io/message/15770#15804 · In reply to: #15770

Can you post a link to your config.m4?

PHP_ADD_FRAMEWORK(Framework) should do the trick. Try having a look at 
the config.m4 for the OpenDirectory extension. It links to the 
DirectoryService framework. http://pecl.php.net/get/opendirectory-0.2.6.tgz

Curious, what specific part of Carbon are you wrapping. Sounds interesting.

-Justin


Michael Johnston wrote:
> (I'm not sure if extension development belongs on this list, but I 
> couldn't find a better one. If there is a more appropriate list, could 
> someone please point me to it?)
> 
> I am working on an extension that is os x specific & relies on Carbon & 
> ApplicationServices (it is a port of appscript, to allow writing 
> applescript applications in php).
> 
> I used ext_skel to create an extension, and ran phpize. In the 
> config.m4, I put:
> 
>   PHP_ADD_FRAMEWORK(Carbon)
>   PHP_ADD_INCLUDE("/Developer/Headers/FlatCarbon")
> 
> but when I attempt to use carbon api I get an undefined symbol error 
> from the dynamic linker.
> 
> looking at the configure script generated by phpize, it seemed to me 
> that the PHP_ADD_FRAMEWORK macro is not actually being used to affect 
> the build. I attempted to change this by manually editing the configure 
> script to add $PHP_FRAMEWORKS to the arguments passed to linktool 
> mode=link, and added   PHP_VAR_SUBST="$PHP_FRAMEWORKS". Using make 
> --debug, I verified that linktool mode=link was now being called with 
> the -framework param, but I still get the same undefined symbol error.
> 
> I don't know much about how the dynamic linker works. What do I need to 
> do to have extension .so link to carbon?
> 
> I am using the 5.0.3 release source package of php, os x 10.3.8, gcc 3.3
> 
> 
> Michael Johnston

---

## #15901 — Michael Johnston — 2005-04-08T01:03:46+00:00

URL: https://externals.io/message/15770#15901 · In reply to: #15804

Hi,

The config is:

PHP_ARG_WITH(carbonae, for carbonae support,
[  --with-carbonae             Include Carbon Apple Events support])

if test "$PHP_CARBONAE" != "no"; then
   if test "`(uname) 2>/dev/null`" != "Darwin"; then
     AC_MSG_ERROR([--with-carbonae can only be used on Mac OS X 
systems.])
   fi


   PHP_ADD_FRAMEWORK(Carbon)
   PHP_ADD_FRAMEWORK(CoreFoundation)
   PHP_ADD_FRAMEWORK(CoreServices)
   PHP_ADD_FRAMEWORK(ApplicationServices)
   PHP_NEW_EXTENSION(carbonae, carbonae.c, $ext_shared)
fi

This extension so far just has a simple function that makes a CFString 
to verify that carbon is getting loaded. The extension builds and 
loads, but when calling the function I get a symbol not found error 
from the dynamic linker.

I want to wrap the Apple Event API, as the first part of porting 
appscript 
(http://freespace.virgin.net/hamish.sanderson/appscript.html), which is 
a python module that allows you to script applications as you would 
with applescript. Combined with PHPOSA, php would then become a 
scripting language for os x, that can be used to control applications. 
I am doing this because as a web developer I am quite familiar with php 
as a language, and I am. utterly. sick. of applescript. as a 
"language".  (but I have to use it quite a lot for automating 
QuarkXPress workflow)

Cheers,
Michael Johnston



> Can you post a link to your config.m4?
>
> PHP_ADD_FRAMEWORK(Framework) should do the trick. Try having a look at 
> the config.m4 for the OpenDirectory extension. It links to the 
> DirectoryService framework. 
> http://pecl.php.net/get/opendirectory-0.2.6.tgz
>
> Curious, what specific part of Carbon are you wrapping. Sounds 
> interesting.
>
> -Justin
>
>
> Michael Johnston wrote:
> > […]

---

## #15925 — Justin Hannus — 2005-04-09T04:19:18+00:00

URL: https://externals.io/message/15770#15925 · In reply to: #15901

FYI: I've posted this topic to the php.pecl.dev list. You should reply 
there, it may be more constructive.
--

Try compiling a your extension as a shared object and loading that into 
PHP with the `dl()` function. This way you can narrow down where the 
problem is coming from with the linker without the added confusion of 
the PHP build system. Once you figure that out you can go back to the 
config.m4 and add whatever you need. An example of these command lines 
(on OSX) would be:

$ gcc -fPIC -Wall -g -DCOMPILE_DL_CARBONAE -Iphpsrc \
-Iphpsrc/main -Iphpsrc/regex -Iphpsrc/Zend \
-Iphpsrc/TSRM -c -o carbonae.o carbonae.c

$ cc -bundle -flat_namespace -undefined suppress \
-framework Carbon -o carbonae.so carbonae.o

Just add the needed frameworks with the -framework switch and make sure 
that COMPILE_DL_CARBONAE in your extension, if defined, will enable a 
line something like:

#if COMPILE_DL_CARBONAE
ZEND_GET_MODULE(carbonae)
#endif

This is done for you with ext_skel or Pecl::Gen, assuming the name of 
your extension is "carbonae".

-Justin


Michael Johnston wrote:
> Hi,
> 
> The config is:
> 
> PHP_ARG_WITH(carbonae, for carbonae support,
> [  --with-carbonae             Include Carbon Apple Events support])
> 
> if test "$PHP_CARBONAE" != "no"; then
>   if test "`(uname) 2>/dev/null`" != "Darwin"; then
>     AC_MSG_ERROR([--with-carbonae can only be used on Mac OS X systems.])
>   fi
> 
> 
>   PHP_ADD_FRAMEWORK(Carbon)
>   PHP_ADD_FRAMEWORK(CoreFoundation)
>   PHP_ADD_FRAMEWORK(CoreServices)
>   PHP_ADD_FRAMEWORK(ApplicationServices)
>   PHP_NEW_EXTENSION(carbonae, carbonae.c, $ext_shared)
> fi
> 
> This extension so far just has a simple function that makes a CFString 
> to verify that carbon is getting loaded. The extension builds and loads, 
> but when calling the function I get a symbol not found error from the 
> dynamic linker.
> 
> I want to wrap the Apple Event API, as the first part of porting 
> appscript (http://freespace.virgin.net/hamish.sanderson/appscript.html), 
> which is a python module that allows you to script applications as you 
> would with applescript. Combined with PHPOSA, php would then become a 
> scripting language for os x, that can be used to control applications. I 
> am doing this because as a web developer I am quite familiar with php as 
> a language, and I am. utterly. sick. of applescript. as a "language".  
> (but I have to use it quite a lot for automating QuarkXPress workflow)
> 
> Cheers,
> Michael Johnston
> 
> 
> 
> > […]
