मैं postgresql के लिए डार्ट में मूल एक्सटेंशन बनाने की कोशिश कर रहा हूं। मैंने सीसी फ़ाइल को .o में संकलित किया है। इसलिए (साझा ऑब्जेक्ट मुझे लगता है)। अब इसे libpsql.so नाम दिया गया है और मैंने इसे अपनी .dart फ़ाइल के समान निर्देशिका में रखा है। डार्ट फ़ाइल की पहली पंक्ति # आयात (डार्ट-एक्सटी: libpsql) है; लेकिन यह मुझे बताता रहता है कि संसाधन अनुपलब्ध है।देशी एक्सटेंशन डार्ट
मेरे डार्ट कोड
#library("psql");
#import("dart-ext:libpsql_dart");
class Database {
var mDb;
var mUser;
var mDbname;
var mPasswd;
var mHost;
var mPort;
var mTable;
//String toString() => "<PostgreSQL: [email protected]$_host:$_port/$_table>";
Database(host,user,passwd,dbname) : this.mUser = user, this.mHost = host, this.mPasswd = passwd, this.mDbname = dbname {
mDb = _connect(host,user,passwd,dbname);
}
}
_connect(host,user,passwd,dbname) native 'Connect';
और यहाँ मेरी सी ++ कोड है।
g++ -fPIC --verbose -I/home/{linux user}/Documents/dart/dart-sdk/include/ -lpq -I/usr/include/postgresql -c psql_dart.cc
gcc -shared -Wl,-soname,libpsql.so -o libpsql.so psql_dart.o
नए कोड मैं टिप्पणी की परीक्षण के बाद मेरी समारोह इस तरह कनेक्ट करें:
void Connect(Dart_NativeArguments args) {
Dart_EnterScope();
// PGconn *conn;
// const char *conninfo = "user=postgres password=postgres host=localhost port=5432";
// conn = PQconnectdb(conninfo);
//
// /* Check to see that the backend connection was successfully made */
// if (PQstatus(conn) != CONNECTION_OK)
// {
// fprintf(stderr, "Connection to database failed: %s",
// PQerrorMessage(conn));
// PQfinish(conn);
// exit(1);
// }
// PQfinish(conn);
Dart_Handle result = HandleError(Dart_NewInteger(0));
Dart_SetReturnValue(args, result);
Dart_ExitScope();
}
#include <string.h>
#include <stdio.h>
#include <libpq-fe.h>
#include "dart_api.h"
Dart_NativeFunction ResolveName(Dart_Handle name, int argc);
DART_EXPORT Dart_Handle psql_dart_Init(Dart_Handle parent_library) {
if (Dart_IsError(parent_library)) return parent_library;
Dart_Handle result_code =
Dart_SetNativeResolver(parent_library, ResolveName);
if (Dart_IsError(result_code)) return result_code;
return Dart_Null();
}
Dart_Handle HandleError(Dart_Handle handle) {
if (Dart_IsError(handle)) Dart_PropagateError(handle);
return handle;
}
void Connect(Dart_NativeArguments args) {
Dart_EnterScope();
PGconn *conn;
const char *conninfo = "user=postgres;password=postgres;host=localhost;port=5432;dbname=reviewdb";
conn = PQconnectdb(conninfo);
/* Check to see that the backend connection was successfully made */
if (PQstatus(conn) != CONNECTION_OK)
{
fprintf(stderr, "Connection to database failed: %s",
PQerrorMessage(conn));
PQfinish(conn);
}
Dart_Handle result = HandleError(Dart_NewInteger((int64_t) conn));
Dart_SetReturnValue(args, result);
Dart_ExitScope();
}
Dart_NativeFunction ResolveName(Dart_Handle name, int argc) {
assert(Dart_IsString8(name));
const char* cname;
Dart_Handle check_error = Dart_StringToCString(name, &cname);
if (Dart_IsError(check_error)) Dart_PropagateError(check_error);
Dart_NativeFunction result = NULL;
if (strcmp("Connect", cname) == 0) result = Connect;
Dart_ExitScope();
return result;
}
HTML स्क्रिप्ट
<script type="application/dart" src="web/lib/psql.dart"></script>
<script type="application/dart" src="web/test_dart.dart"></script>
और आखिरी, मेरे संकलन कमांड लाइन शामिल
आउटपुट :
worked?
Segmentation fault (core dumped)
और मुझे अभी भी सेगफॉल्ट कोई विचार है?
मेरे gdb स्टैकट्रेस:
Starting program: /home/<user>/Documents/dart/dart-sdk/bin/dart test_dart.dart
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
worked?
Program received signal SIGSEGV, Segmentation fault.
dart::Api::NewHandle (isolate=0x948a40, raw=0x7ffff7f80021) at runtime/vm/dart_api_impl.cc:114
114 runtime/vm/dart_api_impl.cc: No such file or directory.
(gdb) bt
#0 dart::Api::NewHandle (isolate=0x948a40, raw=0x7ffff7f80021) at runtime/vm/dart_api_impl.cc:114
#1 0x000000000042e121 in dart::Dart_Invoke (target=<optimized out>, name=0x959b90, number_of_arguments=<optimized out>, arguments=<optimized out>) at runtime/vm/dart_api_impl.cc:3543
#2 0x00000000004097ee in main (argc=<optimized out>, argv=<optimized out>) at runtime/bin/main.cc:724
की कोशिश की 'जी ++ -O2 -DDART_SHARED_LIB मैं/घर/plaudet/दस्तावेज़/डार्ट/डार्ट-sdk के साथ संकलन/शामिल -rdynamic -fPIC कमरा साझा dart_psql.cc मैं/usr/शामिल/PostgreSQL एल/usr /lib/postgresql/9.1/lib -lpq -o dart_psql' अभी भी काम नहीं करते –
मूल एक्सटेंशन के लिए न्यूनतम कोड का प्रयास किया, पुनः संकलित, अभी भी काम नहीं करता है, किसी ऐसे व्यक्ति से मदद चाहिए जो संकलन और चलाने में सक्षम था किसी भी डार्ट देशी विस्तार। कृप्या। –
एप्लिकेशन चलाने की कोशिश करते समय आपको वर्तमान में क्या त्रुटियां मिल रही हैं (नोट मुझे लगता है कि डार्ट-एडिटर के साथ कोई समस्या है जो डार्ट-एक्सटी आयात वाक्यविन्यास को पहचान नहीं रही है)। लेकिन जब आप इसे चलाने की कोशिश करते हैं तो आपको क्या मिलता है? जब मैंने 'libpsql.so' फ़ाइल प्राप्त करने के लिए अपनी जानकारी की प्रतिलिपि बनाई, और मैं # आयात ('डार्ट-एक्सटी: psql'); यह संसाधन देखता है लेकिन इसे लोड नहीं कर सकता है (initilization फ़ंक्शन नहीं मिल सकता) –