<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: Обмен данными с shared object</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7893.html</link>
    <description>Имеется собраная мною shared object, необходимо не только передавать туда параметры-значения, но и несколько параметров-ссылок, чтоб возвращался результат работы библиотеки в некоторых переменных обратно, но пока что не вижу возврата результата, не знаю, как объявить правильнее. Пробовал также использовать &amp; -взятие адреса, но пока не получается. Может это как-то связано с областью видимости переменных? Ключи компилятора для библиотеки: -ftls-model=local-dynamic и -fpic (GCC).&lt;br&gt;&lt;br&gt;&lt;br&gt;объявление функции в библиотеке:&lt;br&gt;&lt;br&gt;void mainprocfunc(char *sPictureSourcePath, char *nProcessingFunction,char *sPicInputFormat,char *sPicOutputFormat,&lt;br&gt;char *sFormatParams,char *sProcessingParams,int iErrorCode, char *sPictureDest,float rProcTime);&lt;br&gt;&lt;br&gt;&lt;br&gt;три последних параметра должны передаваться по ссылке при вызове.&lt;br&gt;код вызова в вызывающей программе:&lt;br&gt;&lt;br&gt;void *lib_library;&lt;br&gt;void (*mainprocfunc)(char *,char *,char *,char *,char *,char *,int, char *, float );&lt;br&gt;char *PicPath1,*nProcP,*InForm,*OutForm,*ForPars,*ProcPars,*PicPath2;&lt;br&gt;</description>

<item>
    <title>Обмен данными с shared object (php-расширение) (dev)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7893.html#8</link>
    <pubDate>Mon, 27 Apr 2009 03:14:54 GMT</pubDate>
    <description>&amp;gt;При возврате строки char * из фукнции возникает &lt;br&gt;&amp;gt;ошибка Segmentation fault: 11 (core dumped).&lt;br&gt;&lt;br&gt;возможно у вас в so есть глобальная переменная-указатель, значение которой присваивает один процесс, а читает другой - в результате segmentation fault&lt;br&gt;</description>
</item>

<item>
    <title>Обмен данными с shared object (php-расширение) (vic)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7893.html#7</link>
    <pubDate>Tue, 10 Feb 2009 18:20:01 GMT</pubDate>
    <description>&amp;gt;path_to_file пока что однозначно возвращает строку &quot;./out.jpg&quot; ,для чего и проверяю функцией &lt;br&gt;&lt;br&gt;как выделяется память под строку path_to_file в вашей функции?&lt;br&gt;приведите код функции связанный с этой строкой.&lt;br&gt;&lt;br&gt;&amp;gt;P.S. К своему стыду, не знаю, как исследовать дамп. &lt;br&gt;&lt;br&gt;шорт-подсказку уже дали, а популярно про отладчик тут:&lt;br&gt;http://www.opennet.ru/docs/RUS/gdb/gdb_toc.html&lt;br&gt;</description>
</item>

<item>
    <title>Обмен данными с shared object (php-расширение) (NuINu)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7893.html#6</link>
    <pubDate>Tue, 10 Feb 2009 14:35:31 GMT</pubDate>
    <description>&amp;gt;&lt;br&gt;&amp;gt;P.S. К своему стыду, не знаю, как исследовать дамп. &lt;br&gt;&lt;br&gt;пример, компилируем и собираем с опцией -g&lt;br&gt;программа gen_fail&lt;br&gt;&lt;br&gt;#Анализ core&lt;br&gt;#gdb gen_fail core&lt;br&gt;#(gdb) info stack&lt;br&gt;##0  0x4007983d in _IO_vfscanf_internal () from /lib/libc.so.6&lt;br&gt;##1  0x4008465d in vsscanf () from /lib/libc.so.6&lt;br&gt;##2  0x4007feed in sscanf () from /lib/libc.so.6&lt;br&gt;##3  0x0804842b in main (argc=3, argv=0xbffff474) at gen_fail.c:16&lt;br&gt;#(gdb) l *0x0804842b&lt;br&gt;#0x804842b is in main (gen_fail.c:16).&lt;br&gt;#11         &#125; else &#123;&lt;br&gt;#12            /*a = strtof(argv&#091;1&#093;, endptr);&lt;br&gt;#13            endptr = NULL;&lt;br&gt;#14            b = strtof(argv&#091;2&#093;, endptr);*/&lt;br&gt;#15            sscanf(argv&#091;1&#093;,&quot;&#037;f&quot;, &amp;a);&lt;br&gt;#16            sscanf(argv&#091;2&#093;,&quot;&#037;f&quot;, b); /*segmentatiom fault call ;-))*/&lt;br&gt;#17            /*sscanf(argv&#091;2&#093;,&quot;&#037;f&quot;, &amp;b);*/&lt;br&gt;#18         &#125;&lt;br&gt;#19&lt;br&gt;#20         float res;&lt;br&gt;#(gdb) q&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>Обмен данными с shared object (php-расширение) (blackswan)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7893.html#5</link>
    <pubDate>Tue, 10 Feb 2009 12:15:29 GMT</pubDate>
    <description>&amp;gt;если ошибки здесь нет, то она возможно где то раньше. а здесь &lt;br&gt;&amp;gt;ее (скрее всего) нет &lt;br&gt;&amp;gt;вот и разберитесь где вы получаете память для path_to_file &lt;br&gt;&amp;gt;судя по логике, это должно происходить где то в mainprocfunc(иначе не зачем &lt;br&gt;&amp;gt;было передавать туда ее как ссылку) &lt;br&gt;&amp;gt;все ли там происходит правильно. &lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;ну а не поможет исследуте дамп. &lt;br&gt;&lt;br&gt;path_to_file пока что однозначно возвращает строку &quot;./out.jpg&quot; ,для чего и проверяю функцией fprintf(filehelp,&quot;StringPath size: &#037;d StringPath &#037;s &#092;n&quot;,pic_path_len,path_to_file), которая выводит всё правильно:&lt;br&gt;StringPath size: 9 StringPath ./out.jpg &lt;br&gt;&lt;br&gt;не имею представления, как провести дебаг этого кода, делал всё по примерам создания php-приложений. Чтоб хоть как-то проверить работу функции mainprocfunc, вызываемой из библиотеки, сделал небольшую программу, делающую аналогичный вызов этой функции из подключаемой .so, там строка возвращается без ошибок. Проблема в макросе ZVAL_STRING, который должен установить тип и значение переменной, вместо него уже использовал аналог</description>
</item>

<item>
    <title>Обмен данными с shared object (php-расширение) (NuINu)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7893.html#4</link>
    <pubDate>Tue, 10 Feb 2009 11:39:01 GMT</pubDate>
    <description>&amp;gt;&#091;оверквотинг удален&#093;&lt;br&gt;&amp;gt;pic_path_len = strlen(path_to_file); &lt;br&gt;&amp;gt;fprintf(filehelp,&quot;StringPath size: &#037;d StringPath &#037;s &#092;n&quot;,pic_path_len,path_to_file); &lt;br&gt;&amp;gt;............................. &lt;br&gt;&amp;gt; ZVAL_LONG(err_code,error_of_processing); &lt;br&gt;&amp;gt; ZVAL_DOUBLE(time_proc,time_of_processing); &lt;br&gt;&amp;gt;//pic_dest-&amp;gt;type = IS_STRING;&lt;br&gt;&amp;gt;//pic_dest-&amp;gt;value.str.len = pic_path_len;&lt;br&gt;&amp;gt;//pic_dest-&amp;gt;value.str.val = estrdup(path_to_file);&lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;***** ZVAL_STRINGL(pic_dest,path_to_file,pic_path_len,1); &lt;br&gt;&lt;br&gt;если ошибки здесь нет, то она возможно где то раньше. а здесь ее (скрее всего) нет&lt;br&gt;вот и разберитесь где вы получаете память для path_to_file&lt;br&gt;судя по логике, это должно происходить где то в mainprocfunc(иначе не зачем было передавать туда ее как ссылку)&lt;br&gt;все ли там происходит правильно.&lt;br&gt;&lt;br&gt;ну а не поможет исследуте дамп.&lt;br&gt;</description>
</item>

<item>
    <title>Обмен данными с shared object (php-расширение) (blackswan)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7893.html#3</link>
    <pubDate>Tue, 10 Feb 2009 11:07:21 GMT</pubDate>
    <description>&amp;gt;&#091;оверквотинг удален&#093;&lt;br&gt;&amp;gt;объявляете так: &lt;br&gt;&amp;gt;void mainprocfunc(char *sPictureSourcePath, char *nProcessingFunction,char *sPicInputFormat,char *sPicOutputFormat, &lt;br&gt;&amp;gt;char *sFormatParams,char *sProcessingParams,int* iErrorCode, char* *sPictureDest,float* rProcTime); &lt;br&gt;&amp;gt;работайте так: &lt;br&gt;&amp;gt;*iErrorCode = 23; &lt;br&gt;&amp;gt;&amp;gt;код вызова в вызывающей программе: &lt;br&gt;&amp;gt;(mainprocfunc)(PicPath1,nProcP,InForm,OutForm,ForPars,ProcPars,&amp;Errcd,&amp;PicPath2,&amp;pr &lt;br&gt;&amp;gt;ctime); &lt;br&gt;&amp;gt;никаких отличий в работе с so по сравнени со статической линковкой быть &lt;br&gt;&amp;gt;не должно &lt;br&gt;&lt;br&gt;спасибо, помогло. теперь другая проблема. библиотека вызывается из php-расширения, тоже сделанного в виде shared object. При возврате строки char * из фукнции возникает ошибка Segmentation fault: 11 (core dumped) . Как я понял, полученная строка не может правильно перейти в таблицу переменных php. Ниже привожу код, строка с ***** и есть проблемной, из-за неё выпадает ошибка. Функция fprintf для проверки выдает нормальную строку, отрабатывает без ошибок.&lt;br&gt;&lt;br&gt;char *path_to_file;&lt;br&gt;int error_o</description>
</item>

<item>
    <title>Обмен данными с shared object (vic)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7893.html#2</link>
    <pubDate>Tue, 10 Feb 2009 08:38:25 GMT</pubDate>
    <description>&amp;gt;Имеется собраная мною shared object, необходимо не только передавать туда параметры-значения, но &lt;br&gt;&amp;gt;и несколько параметров-ссылок, чтоб возвращался результат работы библиотеки в некоторых переменных &lt;br&gt;&amp;gt;обратно, но пока что не вижу возврата результата, не знаю, как &lt;br&gt;&amp;gt;объявить правильнее. Пробовал также использовать &amp; -взятие адреса, но пока не &lt;br&gt;&amp;gt;получается. Может это как-то связано с областью видимости переменных? Ключи компилятора &lt;br&gt;&amp;gt;для библиотеки: -ftls-model=local-dynamic и -fpic (GCC). &lt;br&gt;&amp;gt;&lt;br&gt;&lt;br&gt;Вы определитесь как вы будете получать данные из функции, по ссылке или по адресу.&lt;br&gt;Напишите нужную вам функцию, прямо в свое коде, и работающую функцию просто перенесите в so, и далее ее оттуда экспортируйте.&lt;br&gt;</description>
</item>

<item>
    <title>Обмен данными с shared object (NuINu)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7893.html#1</link>
    <pubDate>Tue, 10 Feb 2009 07:37:52 GMT</pubDate>
    <description>&amp;gt;три последних параметра должны передаваться по ссылке при вызове. &lt;br&gt;&lt;br&gt;объявляете так:&lt;br&gt;void mainprocfunc(char *sPictureSourcePath, char *nProcessingFunction,char *sPicInputFormat,char *sPicOutputFormat, &lt;br&gt;char *sFormatParams,char *sProcessingParams,int* iErrorCode, char* *sPictureDest,float* rProcTime); &lt;br&gt;&lt;br&gt;работайте так:&lt;br&gt;*iErrorCode = 23;&lt;br&gt;&lt;br&gt;&amp;gt;код вызова в вызывающей программе: &lt;br&gt;&lt;br&gt;(mainprocfunc)(PicPath1,nProcP,InForm,OutForm,ForPars,ProcPars,&amp;Errcd,&amp;PicPath2,&amp;pr &lt;br&gt;ctime); &lt;br&gt;&lt;br&gt;никаких отличий в работе с so по сравнени со статической линковкой быть не должно&lt;br&gt;</description>
</item>

</channel>
</rss>
