Thread: Undefined reference with libpq on Visual Studio 2012

Undefined reference with libpq on Visual Studio 2012

From
David Demelier
Date:
Hello all,

I'm trying to build libpq using nmake from Visual Studio 2012. So I've
tried the following :

nmake -f win32.mak CPU=AMD64 while in postgresql-9.2.4/src directory.
It does the following :

        link.exe -lib @C:\Users\markand\AppData\Local\Temp\nm2F60.tmp
        rc.exe /l 0x409 /fo".\Release\libpq.res" libpq-dist.rc
Microsoft (R) Windows (R) Resource Compiler Version 6.2.9200.16384
Copyright (C) Microsoft Corporation.  All rights reserved.

        link.exe @C:\Users\markand\AppData\Local\Temp\nm303B.tmp
libpqdll.def : error LNK2001: symbole externe non résolu PQbackendPID
libpqdll.def : error LNK2001: symbole externe non résolu PQbinaryTuples
libpqdll.def : error LNK2001: symbole externe non résolu PQcancel
libpqdll.def : error LNK2001: symbole externe non résolu PQclear
libpqdll.def : error LNK2001: symbole externe non résolu PQclientEncoding
libpqdll.def : error LNK2001: symbole externe non résolu PQcmdStatus
libpqdll.def : error LNK2001: symbole externe non résolu PQcmdTuples
libpqdll.def : error LNK2001: symbole externe non résolu PQconndefaults
libpqdll.def : error LNK2001: symbole externe non résolu PQconnectPoll
libpqdll.def : error LNK2001: symbole externe non résolu PQconnectStart
libpqdll.def : error LNK2001: symbole externe non résolu PQconnectStartParams
libpqdll.def : error LNK2001: symbole externe non résolu PQconnectdb
libpqdll.def : error LNK2001: symbole externe non résolu PQconnectdbParams
libpqdll.def : error LNK2001: symbole externe non résolu PQconnectionNeedsPasswo
rd
libpqdll.def : error LNK2001: symbole externe non résolu PQconnectionUsedPasswor
d
libpqdll.def : error LNK2001: symbole externe non résolu PQconninfoFree
libpqdll.def : error LNK2001: symbole externe non résolu PQconninfoParse
libpqdll.def : error LNK2001: symbole externe non résolu PQconsumeInput
libpqdll.def : error LNK2001: symbole externe non résolu PQcopyResult
libpqdll.def : error LNK2001: symbole externe non résolu PQdb
libpqdll.def : error LNK2001: symbole externe non résolu PQdescribePortal
libpqdll.def : error LNK2001: symbole externe non résolu PQdescribePrepared
libpqdll.def : error LNK2001: symbole externe non résolu PQdisplayTuples
libpqdll.def : error LNK2001: symbole externe non résolu PQdsplen
libpqdll.def : error LNK2001: symbole externe non résolu PQencryptPassword
libpqdll.def : error LNK2001: symbole externe non résolu PQendcopy
libpqdll.def : error LNK2001: symbole externe non résolu PQenv2encoding
libpqdll.def : error LNK2001: symbole externe non résolu PQerrorMessage
libpqdll.def : error LNK2001: symbole externe non résolu PQescapeBytea
libpqdll.def : error LNK2001: symbole externe non résolu PQescapeByteaConn
libpqdll.def : error LNK2001: symbole externe non résolu PQescapeIdentifier
libpqdll.def : error LNK2001: symbole externe non résolu PQescapeLiteral
libpqdll.def : error LNK2001: symbole externe non résolu PQescapeString
libpqdll.def : error LNK2001: symbole externe non résolu PQescapeStringConn
libpqdll.def : error LNK2001: symbole externe non résolu PQexec
libpqdll.def : error LNK2001: symbole externe non résolu PQexecParams
libpqdll.def : error LNK2001: symbole externe non résolu PQexecPrepared
libpqdll.def : error LNK2001: symbole externe non résolu PQfformat
libpqdll.def : error LNK2001: symbole externe non résolu PQfinish
libpqdll.def : error LNK2001: symbole externe non résolu PQfireResultCreateEvent
s
libpqdll.def : error LNK2001: symbole externe non résolu PQflush
libpqdll.def : error LNK2001: symbole externe non résolu PQfmod
libpqdll.def : error LNK2001: symbole externe non résolu PQfn
libpqdll.def : error LNK2001: symbole externe non résolu PQfname
libpqdll.def : error LNK2001: symbole externe non résolu PQfnumber
libpqdll.def : error LNK2001: symbole externe non résolu PQfreeCancel
libpqdll.def : error LNK2001: symbole externe non résolu PQfreeNotify
libpqdll.def : error LNK2001: symbole externe non résolu PQfreemem
libpqdll.def : error LNK2001: symbole externe non résolu PQfsize
libpqdll.def : error LNK2001: symbole externe non résolu PQftable
libpqdll.def : error LNK2001: symbole externe non résolu PQftablecol
libpqdll.def : error LNK2001: symbole externe non résolu PQftype
libpqdll.def : error LNK2001: symbole externe non résolu PQgetCancel
libpqdll.def : error LNK2001: symbole externe non résolu PQgetCopyData
libpqdll.def : error LNK2001: symbole externe non résolu PQgetResult
libpqdll.def : error LNK2001: symbole externe non résolu PQgetisnull
libpqdll.def : error LNK2001: symbole externe non résolu PQgetlength
libpqdll.def : error LNK2001: symbole externe non résolu PQgetline
libpqdll.def : error LNK2001: symbole externe non résolu PQgetlineAsync
libpqdll.def : error LNK2001: symbole externe non résolu PQgetssl
libpqdll.def : error LNK2001: symbole externe non résolu PQgetvalue
libpqdll.def : error LNK2001: symbole externe non résolu PQhost
libpqdll.def : error LNK2001: symbole externe non résolu PQinitOpenSSL
libpqdll.def : error LNK2001: symbole externe non résolu PQinitSSL
libpqdll.def : error LNK2001: symbole externe non résolu PQinstanceData
libpqdll.def : error LNK2001: symbole externe non résolu PQisBusy
libpqdll.def : error LNK2001: symbole externe non résolu PQisnonblocking
libpqdll.def : error LNK2001: symbole externe non résolu PQisthreadsafe
libpqdll.def : error LNK2001: symbole externe non résolu PQlibVersion
libpqdll.def : error LNK2001: symbole externe non résolu PQmakeEmptyPGresult
libpqdll.def : error LNK2001: symbole externe non résolu PQmblen
libpqdll.def : error LNK2001: symbole externe non résolu PQnfields
libpqdll.def : error LNK2001: symbole externe non résolu PQnotifies
libpqdll.def : error LNK2001: symbole externe non résolu PQnparams
libpqdll.def : error LNK2001: symbole externe non résolu PQntuples
libpqdll.def : error LNK2001: symbole externe non résolu PQoidStatus
libpqdll.def : error LNK2001: symbole externe non résolu PQoidValue
libpqdll.def : error LNK2001: symbole externe non résolu PQoptions
libpqdll.def : error LNK2001: symbole externe non résolu PQparameterStatus
libpqdll.def : error LNK2001: symbole externe non résolu PQparamtype
libpqdll.def : error LNK2001: symbole externe non résolu PQpass
libpqdll.def : error LNK2001: symbole externe non résolu PQping
libpqdll.def : error LNK2001: symbole externe non résolu PQpingParams
libpqdll.def : error LNK2001: symbole externe non résolu PQport
libpqdll.def : error LNK2001: symbole externe non résolu PQprepare
libpqdll.def : error LNK2001: symbole externe non résolu PQprint
libpqdll.def : error LNK2001: symbole externe non résolu PQprintTuples
libpqdll.def : error LNK2001: symbole externe non résolu PQprotocolVersion
libpqdll.def : error LNK2001: symbole externe non résolu PQputCopyData
libpqdll.def : error LNK2001: symbole externe non résolu PQputCopyEnd
libpqdll.def : error LNK2001: symbole externe non résolu PQputline
libpqdll.def : error LNK2001: symbole externe non résolu PQputnbytes
libpqdll.def : error LNK2001: symbole externe non résolu PQregisterEventProc
libpqdll.def : error LNK2001: symbole externe non résolu PQregisterThreadLock
libpqdll.def : error LNK2001: symbole externe non résolu PQrequestCancel
libpqdll.def : error LNK2001: symbole externe non résolu PQresStatus
libpqdll.def : error LNK2001: symbole externe non résolu PQreset
libpqdll.def : error LNK2001: symbole externe non résolu PQresetPoll
libpqdll.def : error LNK2001: symbole externe non résolu PQresetStart
libpqdll.def : error LNK2001: symbole externe non résolu PQresultAlloc
libpqdll.def : error LNK2001: symbole externe non résolu PQresultErrorField
libpqdll.def : error LNK2001: symbole externe non résolu PQresultErrorMessage
libpqdll.def : error LNK2001: symbole externe non résolu PQresultInstanceData
libpqdll.def : error LNK2001: symbole externe non résolu PQresultSetInstanceData

libpqdll.def : error LNK2001: symbole externe non résolu PQresultStatus
libpqdll.def : error LNK2001: symbole externe non résolu PQsendDescribePortal
libpqdll.def : error LNK2001: symbole externe non résolu PQsendDescribePrepared
libpqdll.def : error LNK2001: symbole externe non résolu PQsendPrepare
libpqdll.def : error LNK2001: symbole externe non résolu PQsendQuery
libpqdll.def : error LNK2001: symbole externe non résolu PQsendQueryParams
libpqdll.def : error LNK2001: symbole externe non résolu PQsendQueryPrepared
libpqdll.def : error LNK2001: symbole externe non résolu PQserverVersion
libpqdll.def : error LNK2001: symbole externe non résolu PQsetClientEncoding
libpqdll.def : error LNK2001: symbole externe non résolu PQsetErrorVerbosity
libpqdll.def : error LNK2001: symbole externe non résolu PQsetInstanceData
libpqdll.def : error LNK2001: symbole externe non résolu PQsetNoticeProcessor
libpqdll.def : error LNK2001: symbole externe non résolu PQsetNoticeReceiver
libpqdll.def : error LNK2001: symbole externe non résolu PQsetResultAttrs
libpqdll.def : error LNK2001: symbole externe non résolu PQsetSingleRowMode
libpqdll.def : error LNK2001: symbole externe non résolu PQsetdbLogin
libpqdll.def : error LNK2001: symbole externe non résolu PQsetnonblocking
libpqdll.def : error LNK2001: symbole externe non résolu PQsetvalue
libpqdll.def : error LNK2001: symbole externe non résolu PQsocket
libpqdll.def : error LNK2001: symbole externe non résolu PQstatus
libpqdll.def : error LNK2001: symbole externe non résolu PQtrace
libpqdll.def : error LNK2001: symbole externe non résolu PQtransactionStatus
libpqdll.def : error LNK2001: symbole externe non résolu PQtty
libpqdll.def : error LNK2001: symbole externe non résolu PQunescapeBytea
libpqdll.def : error LNK2001: symbole externe non résolu PQuntrace
libpqdll.def : error LNK2001: symbole externe non résolu PQuser
libpqdll.def : error LNK2001: symbole externe non résolu appendBinaryPQExpBuffer

libpqdll.def : error LNK2001: symbole externe non résolu appendPQExpBuffer
libpqdll.def : error LNK2001: symbole externe non résolu appendPQExpBufferChar
libpqdll.def : error LNK2001: symbole externe non résolu appendPQExpBufferStr
libpqdll.def : error LNK2001: symbole externe non résolu createPQExpBuffer
libpqdll.def : error LNK2001: symbole externe non résolu destroyPQExpBuffer
libpqdll.def : error LNK2001: symbole externe non résolu enlargePQExpBuffer
libpqdll.def : error LNK2001: symbole externe non résolu initPQExpBuffer
libpqdll.def : error LNK2001: symbole externe non résolu lo_close
libpqdll.def : error LNK2001: symbole externe non résolu lo_creat
libpqdll.def : error LNK2001: symbole externe non résolu lo_create
libpqdll.def : error LNK2001: symbole externe non résolu lo_export
libpqdll.def : error LNK2001: symbole externe non résolu lo_import
libpqdll.def : error LNK2001: symbole externe non résolu lo_import_with_oid
libpqdll.def : error LNK2001: symbole externe non résolu lo_lseek
libpqdll.def : error LNK2001: symbole externe non résolu lo_open
libpqdll.def : error LNK2001: symbole externe non résolu lo_read
libpqdll.def : error LNK2001: symbole externe non résolu lo_tell
libpqdll.def : error LNK2001: symbole externe non résolu lo_truncate
libpqdll.def : error LNK2001: symbole externe non résolu lo_unlink
libpqdll.def : error LNK2001: symbole externe non résolu lo_write
libpqdll.def : error LNK2001: symbole externe non résolu pg_char_to_encoding
libpqdll.def : error LNK2001: symbole externe non résolu pg_encoding_to_char
libpqdll.def : error LNK2001: symbole externe non résolu pg_utf_mblen
libpqdll.def : error LNK2001: symbole externe non résolu pg_valid_server_encodin
g
libpqdll.def : error LNK2001: symbole externe non résolu pg_valid_server_encodin
g_id
libpqdll.def : error LNK2001: symbole externe non résolu pgresStatus
libpqdll.def : error LNK2001: symbole externe non résolu pqsignal
libpqdll.def : error LNK2001: symbole externe non résolu printfPQExpBuffer
libpqdll.def : error LNK2001: symbole externe non résolu resetPQExpBuffer
libpqdll.def : error LNK2001: symbole externe non résolu termPQExpBuffer
.\Release\libpqdll.lib : fatal error LNK1120: 161 externes non résolus
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 11.0
\VC\BIN\link.exe"' : code retour '0x460'
Stop.
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 11.0
\VC\BIN\nmake.EXE"' : code retour '0x2'
Stop.

Symbol externe non résolu means "Undefined symbol". Is VS2012 unsupported?

Regards,

--
Demelier David


cal I pass arguments directly to final function in aggregates

From
Nicklas Avén
Date:
Hallo

I am trying to create an aggregate function.

One of the arguments is static and is not needed until the final function.
From the doc I see that the final function " must take a single argument of type state_data_type"

Is it not possible to just pass this arguments directly to the final function?

I was looking at string_agg but that was doing all the processing in the SFUNC if I understand it right.

But to use it as example, if it instead would have collected all strings in an array and added the delimiter in the final function, would that be possible?

I would expect the definition of the aggregate to look something like:

CREATE AGGREGATE string_agg(text, text) (
  SFUNC=string_agg_transfn($1),
  STYPE=internal,
  FINALFUNC=string_agg_finalfn($2)
);

Am I missing something or am I just thinking in irregular circles (that happens now and then)


Best Regards

Nicklas Avén

Re: cal I pass arguments directly to final function in aggregates

From
Tom Lane
Date:
=?UTF-8?B?Tmlja2xhcyBBdsOpbg==?= <nicklas.aven@jordogskog.no> writes:
> I am trying to create an aggregate function.

> One of the arguments is static and is not needed until the final function.
>  From the doc I see that the final function " must take a single
> argument of typestate_data_type"

> Is it not possible to just pass this arguments directly to the final
> function?

No.  There is no expectation in the aggregate infrastructure that any
argument position would have a fixed value across all rows, which is
what you'd need for such a thing to be well-defined.

Perhaps you could construct your usage like this:

    post_process_function(aggregate_function(...), fixed_argument)

where the aggregate_function just collects the varying values
and then the post_process_function does what you were thinking
of as the final function.

            regards, tom lane


Re: cal I pass arguments directly to final function in aggregates

From
Nicklas Avén
Date:
Thank you Tom

On 05/19/2013 01:26 AM, Tom Lane wrote:
> =?UTF-8?B?Tmlja2xhcyBBdsOpbg==?= <nicklas.aven@jordogskog.no> writes:
>
> Perhaps you could construct your usage like this:
>
>     post_process_function(aggregate_function(...), fixed_argument)
>
> where the aggregate_function just collects the varying values
> and then the post_process_function does what you were thinking
> of as the final function.
>
>

Maybe that is the way I have to go. But I would like to avoid it because
I think the interface gets a bit less clean for the users.

I also suspect that it causes some more memcopying to get out of the
aggregation function and into a new function. (Am I right about that)

As i understand it i have two options

1)    Do as you suggest and divide the process in one aggregate function
and one post_processing
2    Contruct a structure for the state-value that can hold those
values. In this case those arguments is just 1 smallint , and 1 char(3).
I will just have to handle them for the first row to store them in my
structure, then I can just ignore them. Am I right that it will be a
very small overhead even if those values are sent to the function for
each row?

My question is if I can get further advice about what bottlenecks and
traps I should consider.

What I am aggregating is geometries (PostGIS). It can be 1 to millions
of rows, and the geometries can be points of a few bytes to complex
geometry-collections of many megabytes.

Regards

/Nicklas