Skip to content

Commit

Permalink
Merge pull request #27 from SolaceDev/dev
Browse files Browse the repository at this point in the history
Release v1.8.1
  • Loading branch information
oodigie authored Dec 20, 2024
2 parents ebe047d + 713bd0d commit 9ca2190
Show file tree
Hide file tree
Showing 38 changed files with 114 additions and 39 deletions.
1 change: 1 addition & 0 deletions internal/ccsmp/ccsmp_container.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import (
)

/*
#cgo CFLAGS: -DSOLCLIENT_PSPLUS_GO
#include <stdlib.h>
#include "solclient/solClient.h"
Expand Down
24 changes: 12 additions & 12 deletions internal/ccsmp/ccsmp_core.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
package ccsmp

/*
#cgo CFLAGS: -DSOLCLIENT_PSPLUS_GO
#include <stdlib.h>
#include <stdio.h>
Expand Down Expand Up @@ -52,6 +53,10 @@ import (

// Reexport of various CCSMP types

type SolClientOpaquePointerType = C.uintptr_t

const SolClientOpaquePointerInvalidValue = SolClientOpaquePointerType(0)

// SolClientContextPt is assigned a value
type SolClientContextPt = C.solClient_opaqueContext_pt

Expand Down Expand Up @@ -250,7 +255,7 @@ type SolClientSession struct {

// SetMessageCallback sets the message callback to use
func (session *SolClientSession) SetMessageCallback(callback SolClientMessageCallback) error {
if session == nil || session.pointer == nil {
if session == nil || session.pointer == SolClientOpaquePointerInvalidValue {
return fmt.Errorf("could not set message receive callback for nil session")
}
if callback == nil {
Expand All @@ -263,7 +268,7 @@ func (session *SolClientSession) SetMessageCallback(callback SolClientMessageCal

// SetReplyMessageCallback sets the message callback to use
func (session *SolClientSession) SetReplyMessageCallback(callback SolClientReplyMessageCallback) error {
if session == nil || session.pointer == nil {
if session == nil || session.pointer == SolClientOpaquePointerInvalidValue {
return fmt.Errorf("could not set message receive callback for nil session")
}
if callback == nil {
Expand All @@ -276,7 +281,7 @@ func (session *SolClientSession) SetReplyMessageCallback(callback SolClientReply

// SetEventCallback sets the event callback to use
func (session *SolClientSession) SetEventCallback(callback SolClientSessionEventCallback) error {
if session == nil || session.pointer == nil {
if session == nil || session.pointer == SolClientOpaquePointerInvalidValue {
return fmt.Errorf("could not set event callback for nil session")
}
if callback == nil {
Expand All @@ -300,8 +305,7 @@ func SolClientInitialize(props []string) *SolClientErrorInfoWrapper {
func SolClientContextCreate() (context *SolClientContext, err *SolClientErrorInfoWrapper) {
var contextP SolClientContextPt
solClientErrorInfo := handleCcsmpError(func() SolClientReturnCode {
var contextFuncInfo C.solClient_context_createFuncInfo_t
return C.solClient_context_create(C.SOLCLIENT_CONTEXT_PROPS_DEFAULT_WITH_CREATE_THREAD, &contextP, &contextFuncInfo, 24)
return C.SessionContextCreate(C.SOLCLIENT_CONTEXT_PROPS_DEFAULT_WITH_CREATE_THREAD, &contextP)
})
if solClientErrorInfo != nil {
return nil, solClientErrorInfo
Expand All @@ -322,14 +326,10 @@ func (context *SolClientContext) SolClientSessionCreate(properties []string) (se
sessionPropsP, sessionPropertiesFreeFunction := ToCArray(properties, true)
defer sessionPropertiesFreeFunction()

var sessionFuncInfo C.solClient_session_createFuncInfo_t
sessionFuncInfo.rxMsgInfo.callback_p = (C.solClient_session_rxMsgCallbackFunc_t)(unsafe.Pointer(C.defaultMessageReceiveCallback))
sessionFuncInfo.rxMsgInfo.user_p = nil
sessionFuncInfo.eventInfo.callback_p = (C.solClient_session_eventCallbackFunc_t)(unsafe.Pointer(C.eventCallback))
sessionFuncInfo.eventInfo.user_p = nil

solClientErrorInfo := handleCcsmpError(func() SolClientReturnCode {
return C.solClient_session_create(sessionPropsP, context.pointer, &sessionP, &sessionFuncInfo, (C.size_t)(unsafe.Sizeof(sessionFuncInfo)))
return C.SessionCreate(sessionPropsP,
context.pointer,
&sessionP)
})
if solClientErrorInfo != nil {
return nil, solClientErrorInfo
Expand Down
1 change: 1 addition & 0 deletions internal/ccsmp/ccsmp_endpoint_permissions.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
package ccsmp

/*
#cgo CFLAGS: -DSOLCLIENT_PSPLUS_GO
#include "solclient/solClient.h"
*/
import "C"
Expand Down
1 change: 1 addition & 0 deletions internal/ccsmp/ccsmp_endpoint_prop_generated.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions internal/ccsmp/ccsmp_flow.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import (
)

/*
#cgo CFLAGS: -DSOLCLIENT_PSPLUS_GO
#include <stdlib.h>
#include <stdio.h>
Expand Down
1 change: 1 addition & 0 deletions internal/ccsmp/ccsmp_flow_event_generated.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions internal/ccsmp/ccsmp_flow_prop_generated.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions internal/ccsmp/ccsmp_global_prop_generated.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

36 changes: 36 additions & 0 deletions internal/ccsmp/ccsmp_helper.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,17 @@
solClient_rxMsgCallback_returnCode_t
messageReceiveCallback(solClient_opaqueSession_pt opaqueSession_p, solClient_opaqueMsg_pt msg_p, void *user_p);

solClient_rxMsgCallback_returnCode_t
defaultMessageReceiveCallback(solClient_opaqueSession_pt opaqueSession_p, solClient_opaqueMsg_pt msg_p, void *user_p);

solClient_rxMsgCallback_returnCode_t
requestResponseReplyMessageReceiveCallback(solClient_opaqueSession_pt opaqueSession_p, solClient_opaqueMsg_pt msg_p, void *user_p);

solClient_rxMsgCallback_returnCode_t
flowMessageReceiveCallback(solClient_opaqueFlow_pt opaqueFlow_p, solClient_opaqueMsg_pt msg_p, void *user_p);

void eventCallback(solClient_opaqueSession_pt opaqueSession_p, solClient_session_eventCallbackInfo_pt eventInfo_p, void *user_p);

void flowEventCallback(solClient_opaqueFlow_pt opaqueFlow_p, solClient_flow_eventCallbackInfo_pt eventInfo_p, void *user_p);

solClient_returnCode_t
Expand All @@ -53,6 +58,37 @@ solClientgo_msg_isRequestReponseMsg(solClient_opaqueMsg_pt msg_p, char **correla
return SOLCLIENT_OK;
}

solClient_returnCode_t
SessionCreate( solClient_propertyArray_pt sessionPropsP,
solClient_opaqueContext_pt contextP,
solClient_opaqueSession_pt *opaqueSession_p)
{
/* allocate the session create struct */
solClient_session_createFuncInfo_t sessionCreateFuncInfo;
sessionCreateFuncInfo.rxMsgInfo.callback_p = (solClient_session_rxMsgCallbackFunc_t)defaultMessageReceiveCallback;
sessionCreateFuncInfo.rxMsgInfo.user_p = NULL;
sessionCreateFuncInfo.eventInfo.callback_p = (solClient_session_eventCallbackFunc_t)eventCallback;
sessionCreateFuncInfo.eventInfo.user_p = NULL;
// allocate thse struct fields to NULL too
sessionCreateFuncInfo.rxInfo.user_p = NULL;
sessionCreateFuncInfo.rxInfo.callback_p = NULL;

return solClient_session_create(sessionPropsP, contextP, opaqueSession_p, &sessionCreateFuncInfo, sizeof(sessionCreateFuncInfo));
}

solClient_returnCode_t
SessionContextCreate( solClient_propertyArray_pt contextPropsP,
solClient_opaqueContext_pt *contextP)
{
/* allocate the session context create struct to NULL */
solClient_context_createFuncInfo_t contextCreateFuncInfo;
contextCreateFuncInfo.regFdInfo.user_p = NULL;
contextCreateFuncInfo.regFdInfo.regFdFunc_p = NULL;
contextCreateFuncInfo.regFdInfo.unregFdFunc_p = NULL;

return solClient_context_create(contextPropsP, contextP, &contextCreateFuncInfo, sizeof(contextCreateFuncInfo));
}

solClient_returnCode_t
SessionFlowCreate( solClient_opaqueSession_pt opaqueSession_p,
solClient_propertyArray_pt flowPropsP,
Expand Down
9 changes: 9 additions & 0 deletions internal/ccsmp/ccsmp_helper.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,15 @@ typedef struct solClient_errorInfo_wrapper
* operating systems are supported, this may need to change to a more complex
* definition.
*/
solClient_returnCode_t SessionCreate(
solClient_propertyArray_pt sessionPropsP,
solClient_opaqueContext_pt contextP,
solClient_opaqueSession_pt *opaqueSession_p);

solClient_returnCode_t SessionContextCreate(
solClient_propertyArray_pt contextPropsP,
solClient_opaqueContext_pt *contextP);

solClient_returnCode_t SessionFlowCreate(
solClient_opaqueSession_pt opaqueSession_p,
solClient_propertyArray_pt flowPropsP,
Expand Down
1 change: 1 addition & 0 deletions internal/ccsmp/ccsmp_log_level_generated.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions internal/ccsmp/ccsmp_message.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
package ccsmp

/*
#cgo CFLAGS: -DSOLCLIENT_PSPLUS_GO
#include <stdlib.h>
#include <string.h>
Expand Down
1 change: 1 addition & 0 deletions internal/ccsmp/ccsmp_message_tracing.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
package ccsmp

/*
#cgo CFLAGS: -DSOLCLIENT_PSPLUS_GO
#include <stdlib.h>
#include <string.h>
Expand Down
1 change: 1 addition & 0 deletions internal/ccsmp/ccsmp_return_code_generated.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions internal/ccsmp/ccsmp_rmid.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
package ccsmp

/*
#cgo CFLAGS: -DSOLCLIENT_PSPLUS_GO
#include <stdlib.h>
#include <string.h>
Expand Down
1 change: 1 addition & 0 deletions internal/ccsmp/ccsmp_session_event_generated.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions internal/ccsmp/ccsmp_session_prop_generated.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions internal/ccsmp/ccsmp_session_stats_rx_generated.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions internal/ccsmp/ccsmp_session_stats_tx_generated.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions internal/ccsmp/cgo_helpers.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
package ccsmp

/*
#cgo CFLAGS: -DSOLCLIENT_PSPLUS_GO
#include <stdio.h>
#include <stdlib.h>
Expand Down
2 changes: 1 addition & 1 deletion internal/ccsmp/generator/ccsmp_endpoint_prop_generator.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ import (
// The environment variable SOLCLIENT_H must be set to the absolute path to project_root/lib/<dist>/include/solclient/solClient.h.

const outputFile string = "ccsmp_endpoint_prop_generated.go"
const header string = "package ccsmp\n// Code generated by ccsmp_endpoint_prop_generator.go via go generate. DO NOT EDIT.\n\n\n/*\n#include \"solclient/solClient.h\"\n*/\nimport \"C\"\nconst (\n"
const header string = "package ccsmp\n// Code generated by ccsmp_endpoint_prop_generator.go via go generate. DO NOT EDIT.\n\n\n/*\n#cgo CFLAGS: -DSOLCLIENT_PSPLUS_GO\n#include \"solclient/solClient.h\"\n*/\nimport \"C\"\nconst (\n"
const footer string = ")\n"
const namePrefix string = "SolClientEndpointProp"
const definePrefix string = "SOLCLIENT_ENDPOINT_PROP"
Expand Down
2 changes: 1 addition & 1 deletion internal/ccsmp/generator/ccsmp_flow_event_generator.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ import (
// The environment variable SOLCLIENT_H must be set to the absolute path to project_root/lib/<dist>/include/solclient/solClient.h.

const outputFile string = "ccsmp_flow_event_generated.go"
const header string = "package ccsmp\n\n// Code generated by ccsmp_flow_event_generator.go via go generate. DO NOT EDIT.\n\n\n/*\n#include \"solclient/solClient.h\"\n*/\nimport \"C\"\nconst (\n"
const header string = "package ccsmp\n\n// Code generated by ccsmp_flow_event_generator.go via go generate. DO NOT EDIT.\n\n\n/*\n#cgo CFLAGS: -DSOLCLIENT_PSPLUS_GO\n#include \"solclient/solClient.h\"\n*/\nimport \"C\"\nconst (\n"
const footer string = ")\n"
const namePrefix string = "SolClientFlowEvent"
const typeName string = "SolClientFlowEvent"
Expand Down
2 changes: 1 addition & 1 deletion internal/ccsmp/generator/ccsmp_flow_prop_generator.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ import (
// The environment variable SOLCLIENT_H must be set to the absolute path to project_root/lib/<dist>/include/solclient/solClient.h.

const outputFile string = "ccsmp_flow_prop_generated.go"
const header string = "package ccsmp\n// Code generated by ccsmp_flow_prop_generator.go via go generate. DO NOT EDIT.\n\n\n/*\n#include \"solclient/solClient.h\"\n*/\nimport \"C\"\nconst (\n"
const header string = "package ccsmp\n// Code generated by ccsmp_flow_prop_generator.go via go generate. DO NOT EDIT.\n\n\n/*\n#cgo CFLAGS: -DSOLCLIENT_PSPLUS_GO\n#include \"solclient/solClient.h\"\n*/\nimport \"C\"\nconst (\n"
const footer string = ")\n"
const namePrefix string = "SolClientFlowProp"
const definePrefix string = "SOLCLIENT_FLOW_PROP"
Expand Down
2 changes: 1 addition & 1 deletion internal/ccsmp/generator/ccsmp_global_prop_generator.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ import (
// The environment variable SOLCLIENT_H must be set to the absolute path to project_root/lib/<dist>/include/solclient/solClient.h.

const outputFile string = "ccsmp_global_prop_generated.go"
const header string = "package ccsmp\n// Code generated by ccsmp_global_prop_generator.go via go generate. DO NOT EDIT.\n\n\n/*\n#include \"solclient/solClient.h\"\n*/\nimport \"C\"\nconst (\n"
const header string = "package ccsmp\n// Code generated by ccsmp_global_prop_generator.go via go generate. DO NOT EDIT.\n\n\n/*\n#cgo CFLAGS: -DSOLCLIENT_PSPLUS_GO\n#include \"solclient/solClient.h\"\n*/\nimport \"C\"\nconst (\n"
const footer string = ")\n"
const namePrefix string = "SolClientGlobalProp"
const definePrefix string = "SOLCLIENT_GLOBAL_PROP"
Expand Down
2 changes: 1 addition & 1 deletion internal/ccsmp/generator/ccsmp_log_level_generator.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ import (
// The environment variable SOLCLIENT_H must be set to the absolute path to project_root/lib/<dist>/include/solclient/solClient.h.

const outputFile string = "ccsmp_log_level_generated.go"
const header string = "package ccsmp\n\n// Code generated by ccsmp_log_level_generator.go via go generate. DO NOT EDIT.\n\n\n/*\n#include \"solclient/solClient.h\"\n*/\nimport \"C\"\nconst (\n"
const header string = "package ccsmp\n\n// Code generated by ccsmp_log_level_generator.go via go generate. DO NOT EDIT.\n\n\n/*\n#cgo CFLAGS: -DSOLCLIENT_PSPLUS_GO\n#include \"solclient/solClient.h\"\n*/\nimport \"C\"\nconst (\n"
const footer string = ")\n"
const namePrefix string = "SolClientLogLevel"
const typeName string = "SolClientLogLevel"
Expand Down
2 changes: 1 addition & 1 deletion internal/ccsmp/generator/ccsmp_return_code_generator.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ import (
// The environment variable SOLCLIENT_H must be set to the absolute path to project_root/lib/<dist>/include/solclient/solClient.h.

const outputFile string = "ccsmp_return_code_generated.go"
const header string = "package ccsmp\n\n// Code generated by ccsmp_return_code_generator.go via go generate. DO NOT EDIT.\n\n\n/*\n#include \"solclient/solClient.h\"\n*/\nimport \"C\"\nconst (\n"
const header string = "package ccsmp\n\n// Code generated by ccsmp_return_code_generator.go via go generate. DO NOT EDIT.\n\n\n/*\n#cgo CFLAGS: -DSOLCLIENT_PSPLUS_GO\n#include \"solclient/solClient.h\"\n*/\nimport \"C\"\nconst (\n"
const footer string = ")\n"
const namePrefix string = "SolClientReturnCode"
const typeName string = "SolClientReturnCode"
Expand Down
2 changes: 1 addition & 1 deletion internal/ccsmp/generator/ccsmp_session_event_generator.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ import (
// The environment variable SOLCLIENT_H must be set to the absolute path to project_root/lib/<dist>/include/solclient/solClient.h.

const outputFile string = "ccsmp_session_event_generated.go"
const header string = "package ccsmp\n\n// Code generated by ccsmp_session_event_generator.go via go generate. DO NOT EDIT.\n\n\n/*\n#include \"solclient/solClient.h\"\n*/\nimport \"C\"\nconst (\n"
const header string = "package ccsmp\n\n// Code generated by ccsmp_session_event_generator.go via go generate. DO NOT EDIT.\n\n\n/*\n#cgo CFLAGS: -DSOLCLIENT_PSPLUS_GO\n#include \"solclient/solClient.h\"\n*/\nimport \"C\"\nconst (\n"
const footer string = ")\n"
const namePrefix string = "SolClientSessionEvent"
const typeName string = "SolClientSessionEvent"
Expand Down
2 changes: 1 addition & 1 deletion internal/ccsmp/generator/ccsmp_session_prop_generator.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ import (
// The environment variable SOLCLIENT_H must be set to the absolute path to project_root/lib/<dist>/include/solclient/solClient.h.

const outputFile string = "ccsmp_session_prop_generated.go"
const header string = "package ccsmp\n// Code generated by ccsmp_session_prop_generator.go via go generate. DO NOT EDIT.\n\n\n/*\n#include \"solclient/solClient.h\"\n*/\nimport \"C\"\nconst (\n"
const header string = "package ccsmp\n// Code generated by ccsmp_session_prop_generator.go via go generate. DO NOT EDIT.\n\n\n/*\n#cgo CFLAGS: -DSOLCLIENT_PSPLUS_GO\n#include \"solclient/solClient.h\"\n*/\nimport \"C\"\nconst (\n"
const footer string = ")\n"
const namePrefix string = "SolClientSessionProp"
const definePrefix string = "SOLCLIENT_SESSION_PROP"
Expand Down
2 changes: 1 addition & 1 deletion internal/ccsmp/generator/ccsmp_session_stats_generator.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ import (
// It can be invoked by running `go generate` in the the ccsmp directory.
// The environment variable SOLCLIENT_H must be set to the absolute path to project_root/lib/<dist>/include/solclient/solClient.h.

const header string = "package ccsmp\n// Code generated by ccsmp_session_stats_generator.go via go generate. DO NOT EDIT.\n\n\n/*\n#include \"solclient/solClient.h\"\n*/\nimport \"C\"\nconst (\n"
const header string = "package ccsmp\n// Code generated by ccsmp_session_stats_generator.go via go generate. DO NOT EDIT.\n\n\n/*\n#cgo CFLAGS: -DSOLCLIENT_PSPLUS_GO\n#include \"solclient/solClient.h\"\n*/\nimport \"C\"\nconst (\n"
const footer string = ")\n"

const outputFilePrefix string = "ccsmp_session_stats_"
Expand Down
2 changes: 1 addition & 1 deletion internal/ccsmp/includes_darwin_amd64.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ package ccsmp

/*
// specific flags for darwin static builds in C
#cgo CFLAGS: -I${SRCDIR}/lib/include
#cgo CFLAGS: -I${SRCDIR}/lib/include -DSOLCLIENT_PSPLUS_GO
#cgo LDFLAGS: -L/usr/local/opt/openssl/lib ${SRCDIR}/lib/darwin/libsolclient.a -lssl -lcrypto -framework Kerberos
*/
import "C"
2 changes: 1 addition & 1 deletion internal/ccsmp/includes_darwin_arm64.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ package ccsmp

/*
// specific flags for darwin static builds in C
#cgo CFLAGS: -I${SRCDIR}/lib/include
#cgo CFLAGS: -I${SRCDIR}/lib/include -DSOLCLIENT_PSPLUS_GO
#cgo LDFLAGS: -L/opt/homebrew/opt/openssl/lib ${SRCDIR}/lib/darwin/libsolclient.a -lssl -lcrypto -framework Kerberos
*/
import "C"
2 changes: 1 addition & 1 deletion internal/ccsmp/includes_linux_amd64.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ package ccsmp

/*
// specific flags for linux static builds in C
#cgo CFLAGS: -I${SRCDIR}/lib/include
#cgo CFLAGS: -I${SRCDIR}/lib/include -DSOLCLIENT_PSPLUS_GO
#cgo LDFLAGS: ${SRCDIR}/lib/linux_amd64/libsolclient.a -lm -ldl -lpthread -lrt
#include <dlfcn.h>
Expand Down
2 changes: 1 addition & 1 deletion internal/ccsmp/includes_linux_arm64.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ package ccsmp

/*
// specific flags for linux static builds in C
#cgo CFLAGS: -I${SRCDIR}/lib/include
#cgo CFLAGS: -I${SRCDIR}/lib/include -DSOLCLIENT_PSPLUS_GO
#cgo LDFLAGS: ${SRCDIR}/lib/linux_arm64/libsolclient.a -lm -ldl -lpthread -lrt
#include <dlfcn.h>
Expand Down
Loading

0 comments on commit 9ca2190

Please sign in to comment.